[CentOS] centos command to monitor a process for exit

Sat Jan 12 00:06:37 UTC 2008
Bill Campbell <centos at celestial.com>

On Sat, Jan 12, 2008, mouss wrote:
>Les Mikesell wrote:
>> Jerry Geis wrote:
>>> Is there a command that will monitor a process for exiting (crash or
>>> normal exit) and
>>> then execute another command based on the said process no longer being
>>> active?
>>>
>>> Or is there a "wrapper" command that runs a process and when that
>>> process exists
>>> due to crashing or just exiting normally) that another process can be
>>> run.
>>>
>> 
>> Why not use a shell script as a wrapper?  If you don't put something in
>> the background with an & on the line, the next line will execute when/if
>> the program started on the current line exits.  There are nearly always
>> other copies of the shell running anyway so you get shared-text
>> efficiency.  If you just want to keep restarting the same program,
>> something like this should run forever.
>> 
>> while :
>>  do
>>   my_program
>>  done
>> 
>
>This has two issues (at least):
>- if the program is a daemon, it returns immediately, so the scrpit will
>try to start the program again and again
>- if the script gets a signal, it will be killed. back to start.

If you use ``kill -0 pid'' it shouldn't affect the running process, and
will return success ($? = 0) if the process is running, and fail otherwise.

A fairly standard way of checking things like this is:

pidfile=/var/run/progname.pid
progname_signal() {
	[ -f $progname_pidfile ] && kill -$1 `cat $progname_pidfile`
}
if progname_signal 0
then
	echo is running
else
	echo not running
fi

Bill
--
INTERNET:   bill at celestial.com  Bill Campbell; Celestial Software LLC
URL: http://www.celestial.com/  PO Box 820; 6641 E. Mercer Way
FAX:            (206) 232-9186  Mercer Island, WA 98040-0820; (206) 236-1676

"If taxation without consent is robbery, the United States government
has never had, has not now, and is never likely to have, a single honest
dollar in its treasury." -- Lysander Spooner, Letter to Grover Cleveland 1886