以前に質問されていたら申し訳ありませんが、この検索クエリをどのように質問すればよいかわかりません。私は Linux の初心者で、問題を解決するために学習しています。
実行中のゲーム サーバーを再起動するための cron ジョブを設定しようとしています。
現在、私のcrontabは次のようになっています
#backup world as instructed by https://github.com/g1franc/SEDS-Setup
0 0 * * * /home/root/spaceengineers/start.sh backupworld
#close server
1 0 * * * /usr/bin/screen -S spaceengineers -X stuff "^C"
#close screen
2 0 * * * /usr/bin/screen -S spaceengineers -X stuff "^M"
#recreate server
3 0 * * * /home/root/spaceengineers/start.sh
今、バックアップワールドで、私はsyslogファイルを取得します/var/log
。
May 24 00:00:01 SpaceEngineers CRON[1958]: (root) CMD (/home/root/spaceengineers/start.sh backupworld)
May 24 00:00:01 SpaceEngineers CRON[1957]: (CRON) info (No MTA installed, discarding output)
これは再作成サーバーでも同様です
May 24 00:03:01 SpaceEngineers CRON[2269]: (root) CMD (/home/root/spaceengineers/start.sh /usr/bin/screen -x spaceengineers)
May 24 00:03:01 SpaceEngineers CRON[2268]: (CRON) info (No MTA installed, discarding output)
他のコマンドは完全に正常に動作します。
誰かが私のコードをこのように構成した理由を尋ねる前に、私が従っていたチュートリアルではサーバーを起動するように書かれており~/spaceengineers/start.sh -x spaceengineers
、私が読んだところによると、Cronでscreenコマンドにアクセスするには/usr/bin/screenを実行する必要があるとのことです。
何が間違っているのでしょうか。また、問題を解決するために何をする必要がありますか。
編集済み:サーバーの現在の内容に合わせてcrontabを変更しましたが、問題は同じままです
start.sh のペーストビン
答え1
この行の GNU screen 構文を確認できますか:
3 0 * * * /home/root/spaceengineers/start.sh /usr/bin/screen -x spaceengineers
私は次のようなものを予想していました:
3 0 * * * /usr/bin/screen -S spaceengineers -X stuff 'command with newline'
ただし、この-X
手段を使用する場合screen
、スクリプトではなく画面コマンドが実行されることになります。
screen
stuff
したがって、次のようにコマンドを使用する必要がありますSUの質問
screen -S sessionname -X stuff 'command'`echo -ne '\015'`
アップデート
/bin/bash
または、使用するシェルが配置されている場所を試してください。
3 0 * * * /bin/bash /home/root/spaceengineers/start.sh
デバッグに役立つようにコンテンツを追加してくださいstart.sh
。
コマンドでシェルを見つけることができますwhich
。sudo
見つけるには、root になる必要があるかもしれません。
答え2
このコマンドは私の場合は機能しましたが、スクリプト内の 1 つ以上のコマンドで sudo が必要だったため、これを root ユーザーの cron で設定する必要がありました。
17 2 29 1 * /usr/bin/screen -dmS $MYSESSIONNAME /bin/bash $FULLPATHTOMYSHELLSCRIPT $SHELLSCRIPTARG1 $SHELLSCRIPTARG2 ...
画面を動作させる(そして cron によって呼び出されたときにただちに閉じないようにする)ための鍵は引数です-d
が、m
何らかの方法/ケースでは引数も役立つ可能性があります。
screen --help
以下は出力からの関連スニペットです
-dmS name
デーモンとして起動: 分離モードでの Screen セッション。"
答え3
@daily /usr/bin/screen -dms aquaticscenery /ig.py && python ig.py