#require two params
#param 1:pid file path
#param 2:call back on pid process stop
ARGS=`getopt -o f:c: -al pidfile:,nostop: -- "$@"`
eval set -- "$ARGS"
while [ -n "$1" ]; do
case "$1" in
--pidfile) pidfile=$2; echo "$2";shift 2;;
--nostop) nostop=$2; echo "$2";shift 2;;
*)break;;
esac
done
if [ ! $pidfile ] ;then
echo "param1:pid file path is NULL";
return;
fi
if [ ! $nostop ] ;then
echo "param2:call back on pid process stop is NULl";
return;
fi
echo -n "pid file in '$pidfile' ,call back on pid process stop is '$nostop',you sure?(y/n)"
read sure
if [ $sure != 'y' ] && [ $sure != 'Y' ] ; then
echo "bye~~~"
return;
fi
echo "start monitor"
log_file="./process.monitor.log"
while true
do
PID=$(cat $pidfile)
echo -n "process PID is $PID"
PID_EXIST=$(ps aux | awk '{print $2}'| grep -w $PID)
echo "pid is exist: $PID_EXIST"
if [ "$PID_EXIST" != "$PID" ];then
echo "`date +'%Y-%m-%d %H:%M:%S'`: the process $PID is not exist,will call back process"
bash -c "$nostop"
echo "`date +'%Y-%m-%d %H:%M:%S'`: the process $PID is not exist,will call back process" >>$log_file
else
echo "`date +'%Y-%m-%d %H:%M:%S'`: the process $PID exist"
echo "`date +'%Y-%m-%d %H:%M:%S'`: the process $PID exist" >> $log_file
fi
sleep 15m
done