2014-02-12 74 views
1

如果結束/崩潰,我想自動重啓一個進程(python腳本)。 到目前爲止我的bash init.d腳本。 我想用更換do_start()調用的開始部分:在Linux中自動重啓一個崩潰進程(python)腳本

until do_start; do 
    echo "Restarting.." >> error.txt 
    sleep 1 
done 

可惜,這似乎並沒有被工作。我的腳本沒有重新啓動。有沒有人提示?

#!/bin/bash 

### BEGIN INIT INFO 
# Provides:   RPiQuadroServer 
# Required-Start: $remote_fs $syslog 
# Required-Stop:  $remote_fs $syslog 
# Default-Start:  2 3 4 5 
# Default-Stop:  0 1 6 
# Short-Description: Put a short description of the service here 
# Description:  Put a long description of the service here 
### END INIT INFO 

WORK_DIR="/var/lib/RPiQuadroServer" 
DAEMON="/usr/bin/python" 
ARGS="/usr/local/bin/RPiQuadroServer.py" 
PIDFILE="/var/run/RPiQuadroServer.pid" 
USER="root" 

. /lib/lsb/init-functions 

do_start() { 
    log_daemon_msg "Starting system $DAEMON $ARGS daemon" 
    mkdir -p "$WORK_DIR" 
    /sbin/start-stop-daemon --start --pidfile $PIDFILE \ 
    --user $USER --group $USER \ 
    -b --make-pidfile \ 
    --chuid $USER \ 
    --exec $DAEMON $ARGS 
    log_end_msg $? 
} 

do_stop() { 
    log_daemon_msg "Stopping system $DAEMON $ARGS daemon" 
    /sbin/start-stop-daemon --stop --pidfile $PIDFILE --verbose 
    log_end_msg $? 
} 

case "$1" in 
    start) 
    do_start 
    ;; 
    stop) 
    log_daemon_msg "Stopping system $DAEMON $ARGS daemon" 
    do_stop 
    ;; 
    restart|reload|force-reload) 
    do_stop 
    do_start 
    ;; 
    status) 
    status_of_proc "$DAEMON $ARGS" "$DAEMON $ARGS" && exit 0 || exit $? 
    ;; 
    *) 
    echo "Usage: /etc/init.d/$USER {start|stop|restart|status}" 
    exit 1 
    ;; 
esac 

回答

1

你需要有某種supervision。 例如monit。它會做你所描述的:啓動/重新啓動過程:

例如:

check process RPiQuadroServe pidfile /var/run/RPiQuadroServer.pid      
start program = "/etc/init.d/RPiQuadroServe start"        
stop program = "/etc/init.d/RPiQuadroServec stop"         
+0

我是不知道的monit(思想cron是唯一的可能性),並試圖出來。非常好的工具。我現在使用它。 – dgrat

1

until循環,循環執行,直到do_start命令成功執行,這意味着它繼續只要do_start出口具有比其他0任何退出代碼。但在你的代碼中,你沒有設置任何退出狀態,所以它會是0。執行Python代碼後,您可能想要設置退出代碼,例如return $?

+0

謝謝,我想我現在明白了問題 – dgrat

相關問題