For now, when "start" action is performed and the server was
already running, thin returns 1 (as it raises
Thin::PidFileExist).
When using "thin ... start" into a service init script it means
that such script is not LSB compliant since a LSB compliant init
script should return 0 when performing the "start" action even if
the server was already running.
So I suggest to add a new command "status" for Thin so it return
0 if it's running, 1 otherwise.
Then in the init script the "start" action could just invoke "thin
... start" if "thin ... status" returned 1.
Also, "status" action is a requeriment of LSB init scripts and
it's needed when using service controllers (as HeartBeat) which
invokes "status" action periodically to know the status of the
server and up it again if it was down. Monit can also checks the
service status by invoking "status" action for the init script.