Bash脚本在发生失败时重新启动程序错误

时间:2016-02-11 05:56:31

标签: linux bash shell scripting

在linux(我使用Ubuntu)中,我运行一个持续一整天运行的(ruby)程序。我的工作是监视程序是否失败,如果是,则重新启动程序。这包括简单地为最后一个命令和'Enter'命中'Up'。很简单。

必须有一种方法来编写一个bash脚本来监视我的程序,如果它停止工作并自动重新启动它。

我将如何做到这一点?

奖励是能够在错误时保存程序的输出。

2 个答案:

答案 0 :(得分:1)

无限循环:

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

答案 1 :(得分:1)

你能做什么:

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

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

另一种方法是定期检查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