リモートホスト上の分離画面

リモートホスト上の分離画面

SSH 経由でリモート スクリプトを実行するローカル スクリプトがあります。ローカル スクリプトは minecraft.php です。

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i {$this->pemkey} {$this->ssh_user} sudo /vol/start_bukkit.sh

リモート スクリプトは /vol/start_bukkit.sh です。

#!/bin/bash
cd "/vol/bukkit"
/usr/bin/screen -S bukkit -m -d /usr/local/bin/java -Xnoclassgc -Xms1024M -Xmx1024M -jar /vol/bukkit/craftbukkit.jar nogui

java コマンドは機能し、craftbukkit.jar を起動しますが、画面は新しいウィンドウを起動しません。何が起こっているのでしょうか? どうすれば新しいウィンドウを作成できますか?

リモート サーバーにサインインして start_bukkit.sh を実行すると、画面は期待どおりに動作し、craftbukkit.jar を実行する新しく分離されたウィンドウが作成されます。

編集:

動作するようになりました。ローカル スクリプトを更新して、sudo を削除し、screen コマンドを追加しました。次のようになります。

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i {$this->pemkey} {$this->ssh_user} /usr/bin/screen -S bukkit -m -d /vol/start_bukkit.sh

リモート側では、screen コマンドを削除しました。

#!/bin/bash
cd "/vol/bukkit"
/usr/local/bin/java -Xnoclassgc -Xms1024M -Xmx1024M -jar /vol/bukkit/craftbukkit.jar nogui

なぜこれが機能するのか説明できません。

答え1

コマンドを使用して擬似 tty を強制的に実行してみてくださいssh

ssh -t -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i
{$this->pemkey} {$this->ssh_user} sudo /vol/start_bukkit.sh


man 1 ssh

     -t      Force pseudo-tty allocation.  This can be used to execute
             arbitrary screen-based programs on a remote machine, which 
             can be very useful, e.g. when implementing menu services.  
             Multiple -t options force tty allocation, even if ssh has 
             no local tty.

また、スクリプト ではstart_bukkit.sh、PATH が設定されていません。絶対パスなしで を呼び出すため、見つからない可能性があります。スクリプトの先頭で PATH を設定するか (ベスト プラクティス)、絶対パス ( ) で をjava呼び出します。java/usr/bin/java

関連情報