新しいスクリーンセッションでコマンドを開始できない

新しいスクリーンセッションでコマンドを開始できない

新しい screen セッションでコマンドを実行し (そしてそこから切り離し) たいのですが、うまくいきません。新しい screen セッションでプロセスを開始し、次のように切り離そうとしました:

screen -d -m mycommmand

しかし、そのスクリーンセッションにアタッチしようとすると

screen -r

「再開できる画面がありません」というメッセージが表示されます。また、新しい画面セッションでコマンドを開始しようとしました。

screen mycommand

これを実行すると、新しい screen セッションが開始されますが、コマンドは実行されません。

このコマンドはゲーム サーバーを起動する .sh スクリプトですが、ゲーム サーバーは起動しません。

[編集] 正確なコマンドを尋ねる人がいたので、ここに示します。これは、別の画面セッションで Minecraft サーバーを起動する bash スクリプトです。

./startServer.sh

.sh スクリプトは次のとおりです。

cd "/home/tim/minecraft/survivalServer"
screen -S "minecraft-server-1-14-4" -m -d /home/tim/java/bin/java -Xmx4096M -Xms1024M -jar /home/tim/minecraft/survivalServer/minecraft_server.1.14.4.jar nogui

さて、問題は、スクリプトを実行すると、新しいスクリーン セッションの作成に失敗するということです。なぜでしょうか?

ご協力をお願いします。ありがとうございます

答え1

問題は、ネストされたデタッチされたスクリーン インスタンスを、デタッチされたスクリーン インスタンス内で起動しようとしていることです。スクリプトには次の行が含まれています:

screen -S "minecraft-server-1-14-4" -m -d /home/tim/java/bin/java -Xmx4096M -Xms1024M -jar /home/tim/minecraft/survivalServer/minecraft_server.1.14.4.jar nogui

これは screen を起動し、screen セッションに名前を付けminecraft-server-1-14-4てから minecraft を起動してデタッチします。ただし、 も実行しようとしていますscreen -d -m ./startserver.sh。つまり、スクリプトで screen セッションが作成される前に、デタッチされた screen セッション内でスクリプトが既に実行されています。これは...あまりうまく機能しない傾向があります。

機能的には次のものと同じです:

wolferz@khaos ~ $ screen -m -d screen -S 'mysession' -m -d top
wolferz@khaos ~ $ screen -r
There is a screen on:
        24850.mysession (07/24/2019 10:47:46 PM)        (Dead ???)
Remove dead screens with 'screen -wipe'.
There is no screen to be resumed.

スクリプトを直接実行したいのであれば、 と実行してください./startserver.sh。するとプロンプトに戻ります。その後、screen -r通常どおりに を実行して Minecraft コンソールに接続できます。

関連情報