Recently I received some beta software that I had to integration-test with our own software. However this software kept crapping out and made this impossible.
The following shell script is a quick and dirty way to try and keep up a process.
#!/bin/sh
# This script will periodically check whether a process still runs and if
# not, will run a predefined action (such as starting it again).
# Name of process that must be watched
procname="myproc.sh"
# Command to execute if watched process failed. If this is not a process
# that runs in the background, add an ampersand to the command. Separate
# multiple commands with a semicolon. Don't add double quotes, since
# this might pass multiple parameters as one parameter.
action=./$procname &
# When the watched process was found not running, the date is written
# to this file along with any output that the process prints on stdout
# when it's started again.
logfile="$0.log"
###########################################################################
# No user-configurable code below
while [ 1 ]; do
nrproc=`ps -e | awk '{print $4}' | grep myproc.sh | wc -l`
if [ $nrproc == '0' ]; then
output=`$action`
date >> $logfile
echo "$output" >> $logfile
sleep 10
else
sleep 1
fi
doneWatch out with this script, though. If you kill it, then the started process will also die. There might be many more bugs and issues.