在linux下(我用的是Ubuntu的),我跑,不断长期运行一整天(红宝石)的程序。我的工作是监视,看看该程序失败,如果是的话,重新启动该程序。这包括简单地点击上一个命令的'Up'和'Enter'。够简单。bash脚本来重新启动程序失败错误的情况下
必须有写一个bash脚本来监视我的计划,如果它停止工作,并自动重新启动它的方式。
我该怎么做呢?
奖金是能够当它的错误保存程序的输出。
在linux下(我用的是Ubuntu的),我跑,不断长期运行一整天(红宝石)的程序。我的工作是监视,看看该程序失败,如果是的话,重新启动该程序。这包括简单地点击上一个命令的'Up'和'Enter'。够简单。bash脚本来重新启动程序失败错误的情况下
必须有写一个bash脚本来监视我的计划,如果它停止工作,并自动重新启动它的方式。
我该怎么做呢?
奖金是能够当它的错误保存程序的输出。
无限循环:
while true; do
your_program >> /path/to/error.log 2>&1
done
如果your_program是旋转循环(例如,快速重复崩溃),通常在调用程序之后添加一个'sleep 1'是很明智的。 –
@WilliamPursell:这是一个有用的补充。 – Cyrus
你可以做什么:
#!/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
虽然参考答案很简单,肯定会工作,你可以考虑使用专门的软件来监督你的程序。像[主管](http://supervisord.org/)或看[这里](https://news.ycombinator.com/item?id=1368855)为更多的选择。 –