shell:监控进程运行状态并自动重启进程

#!/bin/sh

MAXRSTCOUNT=5;
PROCTOGO=/mnt/hgfs/code/test/show

#count is the counter of test started times
count=0

sys_reboot()
{
    echo "system is going to reboot";
    reboot;
}

main_loop()
{
    while :
    do
    #########################################
    ProStillRunning=$(ps -aux |grep "${PROCTOGO}" |grep -v "grep")
    if [ -z "$ProStillRunning" ]; then
        #start test
        chmod +x ${PROCTOGO}
        ${PROCTOGO}
    fi

    #the running times counter
    let count=count+1
    echo "test running times is $count"

    #wait for test stoping...
    sleep 3

    #########################################
    done
}

main_loop;

实例:

cat etc/init.d/monitor-app.sh

#!/bin/bash
sleep 40

while [ 1 ]
do
        for procname in app
        do
                pgrep $procname > /dev/null
                if [ 0 -ne $? ]
                then
                        /etc/init.d/autoapp start &   ##autoapp可以是脚本,app等
                fi
        done
        sleep 30
done

一个app启动脚本:

cat etc/init.d/automhclient

#! /bin/sh
PATH=/sbin:/usr/sbin:/bin:/usr/bin

case "$1" in
    start)
        echo -n "Starting automhclient: "
                export DISPLAY=:0
                cd /usr/share/qt5/app/mhclient
                ./automhclient &
                echo
                exit 0
        ;;
    stop)
        echo -n "Shutting down automhclient: "
        killproc automhclient
        echo
        ;;
    restart)
        echo -n "Restarting automhclient: "
        $0 stop
        $0 start
        echo
        ;;
    *)
        echo "Usage: $0 start|stop" >&2
        exit 3
        ;;
esac
原文地址:https://www.cnblogs.com/mylinux/p/5555926.html