
所以我正在託管一個非常喜怒無常的遊戲,在 Linux 上可能會崩潰很多次,我做了這個 cronjob 來重新啟動螢幕和遊戲,如果它失敗了:
#!/bin/bash
for t in {1..12} do
if [ -z "$(ps -C game | grep game)" ]
then
/usr/bin/screen -d -m -S ss13 /usr/local/bin/game /home/gamefolder/game/game.dmb 1336
fi
sleep 5
done
如果螢幕名稱不存在,則 cron 作業可以很好地啟動遊戲伺服器,但是如果遊戲正在運行並崩潰,則 cronjob 將無法工作並且遊戲不會重新啟動。
然而,遊戲已經在螢幕名稱 ss13 中運行,螢幕本身並沒有崩潰,只是遊戲崩潰了。所以我認為發生的情況是,當遊戲崩潰時,它會嘗試創建一個包含遊戲的新螢幕,但顯然不能。有更好的方法嗎?這裡仍然是一個Linux菜鳥。
答案1
這並不是真正的工作cron
,我建議在screen
會話中運行如下所示的內容:
while :; do
/usr/local/bin/game /home/gamefolder/game/game.dmb 1336
done
:
是 的簡寫true
。
以上假設遊戲沒有守護程式。在這種情況下使用:
while :; do
if [ -z "$(ps -C game | grep game)" ]; then
/usr/local/bin/game /home/gamefolder/game/game.dmb 1336
fi
sleep 5
done
答案2
我熟悉使用螢幕,但我不太確定你想在這裡做什麼。如果您希望伺服器自動重新啟動,那麼您實際上並不需要 screen。也許您更喜歡在崩潰後立即重新啟動的腳本(而不是 5 秒後)。
#!/bin/bash
for t in {1..12}
do
/usr/local/bin/game /home/gamefolder /game/game.dmb 1336
done