私はMinecraftサーバー用の自動バックアップシステムを設定しようとしましたが、スクリーンの使用に問題があります。特に、「screen -r sessionname -X "/var/minecraft/somebatchfile"" を使用する場合、何も起こりません。
私の現在のプロセスは次のとおりです。
screen -m -d -S minecraft /var/minecraft/bin/server_nogui.sh
これにより、問題なくMinecraftサーバーが起動します。しかし、問題は、このような単純なフォローアップも失敗することです。
screen -r minecraft -X "stop"
エラーや成功のメッセージは表示されず、サーバーは実際にクライアントの接続を切断して終了しません。私が何か間違っているようですが、何かわかりません。私は明らかな間違いをしましたか?マニュアルページを少し読みましたが、自分で理解できませんでした。
答え1
-X
引数にコマンドを与える必要があります。私の考えでは、Minecraft-serverコマンドをセッションscreen
に「埋めたい」と思います。screen
screen -r minecraft -p 0 -X stuff "stop $(printf '\r')"
キャリッジリターン文字が送信されるため、printf
「stop」コマンドが実行されます。-p 0
キャラクターが正しいことを確認してください送るスプラッシュ画面ウィンドウに移動します。
これを送信するには、ssh
コマンドをラップする必要があります" "
(を使用することもできますが、` `
コマンド置換を実行することはできません)。
ssh -t -i ~/.ssh/id_dsa server_user@server_address "screen -r minecraft -X stuff "even other_server_name is getting in on the action\! $(echo -ne '\r')""
これは!
予約語なので、エスケープする必要があります。
道路可能ユーザーが生成した改行をコマンドに含めて実行します。
ssh -t -i ~/.ssh/id_dsa server_user@server_address "screen -r minecraft -X stuff 'even other_server_name is getting in on the action!
'"
!
ここで脱出する必要はありません。
答え2
私たちが見つけたようにこの同様の質問、接続されていないセッションにキーを送信するときに画面に問題があります。接続すると、メインウィンドウは0に設定されます。それ以外の場合は、キーストロークがウィンドウに入らないため、自動的に失敗します。あなたはこれを避けることができます-p 0
パラメータを追加して画面コマンドで。
または、より良い行動を使用することができますtmux
このように:
tmux new-session -d -n minecraft /var/minecraft/bin/server_nogui.sh
次に、次のように Minecraft サーバーに停止コマンドを送信します。
tmux send-keys -t minecraft "stop^M"
上記の^Mシーケンスは、実際の入力を視覚的に表現したものです。Ctrl+を押すのと同じコマンドで生成できますv Enter。これは、キャリッジリターンを送信するためにechoステートメントを使用するよりも簡単です。ワグの答え。