リモートホストの画面分割

リモートホストの画面分割

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.shPATHを設定しません。呼び出し時に絶対パスを使用していないjavaため、見つからない可能性があります。スクリプトの先頭にPATHを設定するか(ベストプラクティス)、java絶対パス(/usr/bin/java)を介して呼び出します。

おすすめ記事