
私は 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
screen の使用には慣れていますが、ここで何をしようとしているのかよくわかりません。サーバーを自動的に再起動したい場合は、そのために screen は必要ありません。クラッシュ後すぐに (5 秒後ではなく) 再起動するスクリプトの方が望ましいかもしれません。
#!/bin/bash
for t in {1..12}
do
/usr/local/bin/game /home/gamefolder /game/game.dmb 1336
done