2016-02-11 37 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 
相關問題