cronタブを使用してスクリーンセッションを実行しないシェルスクリプト

cronタブを使用してスクリーンセッションを実行しないシェルスクリプト

私はAlmalinux VPSで子供のためにMinecraft Bedrockサーバーを運営しています。完全にはサポートされていませんが、動作します。 1日2回ほど閉まります。サーバーを自動的に再起動しようとしています。毎分実行され、サーバーを再起動するように設計されたcronジョブがあります。再起動されたコマンドラインは、端末で実行すると機能しますが、crontabでは機能しません。エコメッセージが私に電子メールで送信されるので、スクリプト自体が実行されます。ログファイルの書き込みを含むscreenコマンドを何度も繰り返しましたが、ファイルは生成されませんでした。

私のcrontabエントリ:

* * * * * root /bin/bash /home/mcserver/minecraft_bedrock/restart.sh

私のファイルrestart.sh:

#!/bin/bash
ps_out=`ps -ef | grep bedrock_server | grep -v 'grep' | grep -v $0`
result=$(echo $ps_out | grep bedrock_server)
if [[ "$result" == "" ]]; then
    echo "attempting restart"
    screen -d -m /home/mcserver/minecraft_bedrock/bedrock_server 
fi

正しい方向にご案内いただきありがとうございます!

編集:もう少し試した後、スクリプトが機能するようにすることができました。この質問については、私が理解していない部分があるようで、直接回答することはありませんし、画面の使い方やなぜ動作しないのか説明してくれたユーザーの方に答えを差し上げたいと思います。以下のコード(アクション)では、私が試してみましたが、うまくいかなかったもの(screenとtmuxを使用)をコメントアウトしました。スタートアップファイル./bedrock_serverを実行しようとしましたが、端末を使用する必要があるというメッセージが表示される前にエラーが発生し、画面の使用を開始しました。最近のエラーに基づいてディレクトリを絶対ディレクトリに変更し、./bedrock_serverを実行する必要があると判断しました。作業コードは次のとおりです。

#!/bin/bash
ps_out=`ps -ef | grep bedrock_server | grep -v 'grep' | grep -v $0`
result=$(echo $ps_out | grep bedrock_server)
if [[ "$result" == "" ]]; then
    # screen -d -m /home/mcserver/minecraft_bedrock/bedrock_server
    #tmux new-session -d -s mc_session '/home/mcserver/minecraft_bedrock/bedrock_server'
    cd /home/mcserver/minecraft_bedrock/
    ./bedrock_server
fi

ベストアンサー1

おすすめ記事