新しいスクリーン セッションを作成し、コマンドを実行しても、画面をそこに残すにはどうすればよいですか?

新しいスクリーン セッションを作成し、コマンドを実行しても、画面をそこに残すにはどうすればよいですか?

皆さんこんにちは。Minecraft サーバーを自分のサーバーで起動させようとしています。適切なコマンドがわかったら、cron を使用します。Minecraft を「Minecraft」という新しい画面で起動し、このセッションにサーバーを起動するコマンドを送信したいと考えています。毎朝 3 時に「stop」コマンドを送信して Minecraft サーバーを停止し、次にサーバーを起動するコマンドを送信します (Minecraft は時々再起動しないとバグが発生します)。画面オプションをいじっていたところ、Minecraft が数秒間起動し、画面によって強制終了されました。オンラインで読んだところによると、このコマンドは機能するはずです。

screen -dmS Minecraft java -Xmx12G -Xms12G -jar /home/alan/minecraft/forge-1.16.5-36.2.30.jar --nogui

変更を加えたので、このセッションに再接続してコマンドを入力するか、Minecraft サーバーを再起動したいのですが、実行したコマンドはすべて機能しませんでした。「screen -ls」と入力しても、「Minecraft」セッションがありません。cron の使い方はわかっていますが、screen は明らかに理解していません。私の地域では停電が頻繁に発生するため、UPS でサーバーをシャットダウンし、電源が回復したら Raspberry PI でサーバーを再起動するようにしています。Minecraft をスタートアップに含めることができれば便利です。その後、すべてのサービスが介入なしで自動的に開始および停止します。

答え1

画面に名前を付けたのでMinecraft

# Tell Minecraft to gracefully stop.
# Ending Minecraft will terminate Java
# systemd will kill Screen after the 10-second delay. No explicit kill for Screen needed
screen -p 0 -S Minecraft -X eval 'stuff "say SERVER SHUTTING DOWN. Saving map..."\\015'
screen -p 0 -S Minecraft -X eval 'stuff "save-all"\\015'
screen -p 0 -S Minecraft -X eval 'stuff "stop"\\015'
sleep 10

コマンドを systemd サービスにラップするのは簡単で、起動時の自動起動、ステータス監視、systemctl を使用した簡単な起動/停止/再起動制御も可能になります。

通常、すべての出力がログに記録され、すべてのサーバー コマンドは管理コンソールから入力できるため、画面を開いたままにする必要はありません。

数年前にこのプロセス全体についてブログに書きました。これはhttp://cheesehead-techblog.blogspot.com/2019/08/toggling-minecraft-server-using-systemd.html

関連情報