cronを使用して画面でスクリプトを開始する

cronを使用して画面でスクリプトを開始する

以前に質問されていたら申し訳ありませんが、この検索クエリをどのように質問すればよいかわかりません。私は 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 のペーストビン

http://pastebin.com/9QcWyqYF

答え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

コマンドでシェルを見つけることができますwhichsudo見つけるには、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

関連情報