Question

i am using shell script to monitor the working of a php script. My aim is that this php script should not sleep / terminated and must always be running.The code i used is -

ps aux | grep -v grep | grep -q $file || ( nohup php -f $file -print > /var/log/file.log & ) 

now this idea would not work for cases if the php script got terminated(process status code T). Any idea to handle that case. can such processes be killed permanently and then restarted.

Was it helpful?

Solution

If the script is exiting after it's been terminater, or if it crashes out, and needs to be restarted, a simple shell script can take care of that.

#!/bin/bash
# runScript.sh - keep a php script running
php -q -f ./cli-script.php -- $@
exec $0 $@;

The exec $0 re-runs the shell script, with the parameters it was given.

To run in the background you can nohup runScript.sh or run it via init.d scripts, upstart, runit or supervisord, among others.

OTHER TIPS

How about just restarting the php interpreter when it dies?

while true ; do php -f $file -print >> /var/log/file.log ; done

Of course, someone could send the script a SIGSTOP, SIGTSTP, SIGTTIN, SIGTTOU to cause it to hang, but perhaps that person has a really good reason. You can block them all except SIGSTOP, so maybe that's alright.

Or if the script does something like call read(2) on a device or socket that will never return, this won't really ensure the 'liveness' of your script. (But then you'd use non-blocking IO to prevent this situation, so that's covered.)

Oh yes, you could also stuff it into your /etc/inittab. But I'm not giving you more than a hint about this one, because I think it is probably a bad idea.

And there are many similar tools that already exist: daemontools and Linux Heartbeat are the first two to come to mind.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top