On Fri, 2008-01-11 at 16:06 -0800, Bill Campbell wrote: > 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 ISTM that the trap command could be quite useful in this scenario. "man bash", under built-in commands. One can analyze various returns, timestamp to prevent runaway restarting, etc. I've used it in the (far distant) past to great advantage. > <snip sig stuff> HTH -- Bill