
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