Tela desanexada em um host remoto

Tela desanexada em um host remoto

Tenho um script local que executa um script remoto via ssh. O script local é minecraft.php:

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

O script remoto é /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

O que acontece é que o comando java funciona, lançando craftbukkit.jar, mas a tela não abre uma nova janela. O que está acontecendo? Como uma nova janela pode ser criada?

Se eu entrar no servidor remoto e executar start_bukkit.sh, screen funcionará conforme o esperado, criando uma janela recém-desanexada executando craftbukkit.jar nela.

EDITAR:

Eu fiz funcionar. Atualizei o script local removendo o sudo e inserindo o comando 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

No lado remoto removi o comando screen:

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

Não consigo explicar por que isso funciona.

Responder1

Tente forçar um psuedo-tty com seu sshcomando.

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.

Além disso, no seu script start_bukkit.sh, você não tem um PATH definido. Você chama javasem um caminho absoluto, então pode não ser encontrado. Defina um PATH no início do script (melhor prática) ou chame javapelo caminho absoluto ( /usr/bin/java).

informação relacionada