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
リモート側では画面コマンドを削除しました。
#!/bin/bash
cd "/vol/bukkit"
/usr/local/bin/java -Xnoclassgc -Xms1024M -Xmx1024M -jar /vol/bukkit/craftbukkit.jar nogui
これがなぜ機能するのか説明できません。
ベストアンサー1
コマンドを使用してpsuedo-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を設定しません。呼び出し時に絶対パスを使用していないjava
ため、見つからない可能性があります。スクリプトの先頭にPATHを設定するか(ベストプラクティス)、java
絶対パス(/usr/bin/java
)を介して呼び出します。