linux-守护进程_自重启

用于自动重启被系统杀掉的进程(net_speeder老是被杀,所以就有了这个东西)


  • auto_net_speeder.sh 脚本

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    #!/bin/bash

    CMD="/usr/local/net_speeder/net_speeder venet0 \"ip\" >/dev/null 2>&1 &"
    PID="./net_speeder_log/PID.txt"
    LOG="./net_speeder_log/mypgm.log"
    DEBUG="false"

    # ---------------------------------------------------

    # 启动函数
    function start {
    $CMD
    mypgmpid=$!
    echo $mypgmpid > $PID
    echo "start [ok]"
    }

    # 停止函数
    function stop {
    kill `cat $PID`
    rm $PID
    echo "stop [ok]"
    }

    # --------------------------------------------------
    echo "$CMD $1"

    case "$1" in
    start)
    start
    ;;
    start_debug)
    DEBUG="true"
    start
    ;;
    restart)
    if [ -f $PID ] ; then
    stop
    sleep 4
    fi
    start
    ;;
    stop)
    stop
    exit 0
    ;;
    esac
    for (( c=0 ; ; c++ ))
    do
    if [ -f $PID ] ; then
    mypgmpid=`cat $PID`
    cmdex="ps uh -p$mypgmpid"
    psrtn=`$cmdex`
    if [ -z "$psrtn" ]; then
    # 进程挂掉自动重启
    echo "`date '+%Y/%m/%d %H:%M:%S'` FATALERROR RESTART SERVICE" >> $LOG
    start
    elif (( $c%20 == 0 )); then
    # 记录进程运行状态
    echo "`date '+%Y/%m/%d %H:%M:%S'` PSINFO $psrtn" >> $LOG
    c=0
    fi
    sleep 3
    else
    break
    fi
    done

启动:./auto_net_speeder.sh start &

debug 启动 : ./auto_net_speeder.sh start_debug &

重启:./auto_net_speeder.sh restart &

停止:./auto_net_speeder.sh stop

另外,此脚本只是示例,提供一个思路。到你正在用的时候,需要按照自己需求修改