Отдельный экран на удаленном хосте

У меня есть локальный скрипт, который запускает удаленный скрипт через 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 и введя команду экрана. Вот он:

 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 

Я не могу объяснить, почему это работает.

Попробуйте заставить 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, eg 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 ).