2016-02-11 42 views
1

在linux下(我用的是Ubuntu的),我跑,不断长期运行一整天(红宝石)的程序。我的工作是监视,看看该程序失败,如果是的话,重新启动该程序。这包括简单地点击上一个命令的'Up'和'Enter'。够简单。bash脚本来重新启动程序失败错误的情况下

必须有写一个bash脚本来监视我的计划,如果它停止工作,并自动重新启动它的方式。

我该怎么做呢?

奖金是能够当它的错误保存程序的输出。

+0

虽然参考答案很简单,肯定会工作,你可以考虑使用专门的软件来监督你的程序。像[主管](http://supervisord.org/)或看[这里](https://news.ycombinator.com/item?id=1368855)为更多的选择。 –

回答

1

无限循环:

while true; do 
    your_program >> /path/to/error.log 2>&1 
done 
+0

如果your_program是旋转循环(例如,快速重复崩溃),通常在调用程序之后添加一个'sleep 1'是很明智的。 –

+0

@WilliamPursell:这是一个有用的补充。 – Cyrus

1

你可以做什么:

#!/bin/bash 
LOGFILE="some_file.log" 
LAUNCH="your_program" 

while : 
do 
    echo "New launch at `date`" >> "${LOGFILE}" 
    ${LAUNCH} >> "${LOGFILE}" 2>&1 & 
    wait 
done 

另一种方法是periodicaly检查PID:

#!/bin/bash 
LOGFILE="some_file.log" 
LAUNCH="your_program" 

PID="" 
CHECK="" 

while : 
do 
    if [ -n "${PID}" ]; then 
     CHECK=`ps -o pid:1= -p "${PID}"` 
    fi 

    # If PID does not exist anymore, launch again 
    if [ -z "${CHECK}" ]; then 
     echo "New launch at `date`" >> "${LOGFILE}" 

     # Launch command and keep track of the PID 
     ${LAUNCH} >> "${LOGFILE}" 2>&1 & 
     PID=$! 
    fi 

    sleep 2 
done 
相关问题