因此,我正在托管一个非常不稳定并且在 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 作业可以很好地启动游戏服务器,但是如果游戏正在运行并崩溃,cron 作业将无法工作,并且游戏不会重新启动。
但是游戏已经在屏幕名称 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
我熟悉使用屏幕,但我不太清楚你在这里想做什么。如果你想让服务器自动重启,那么你真的不需要屏幕。也许你更喜欢在崩溃后立即重启的脚本(而不是 5 秒后)。
#!/bin/bash
for t in {1..12}
do
/usr/local/bin/game /home/gamefolder /game/game.dmb 1336
done