在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)爲更多的選擇。 –