Tela desanexada em um host remoto

1

Eu 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, iniciando o craftbukkit.jar, mas a tela não inicia uma nova janela. O que está acontecendo? Como uma nova janela pode ser criada?

Se eu entrar no servidor remoto e executar o start_bukkit.sh, a tela funcionará conforme o esperado, criando uma nova janela desanexada executando o craftbukkit.jar nela.

EDITAR:

Eu tenho que trabalhar. Eu atualizei o script local removendo o sudo e colocando o comando screen. Aqui está:

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 sei explicar por que isso funciona.

    
por PaulS 26.06.2012 / 14:48

1 resposta

1

Tente forçar um psuedo-tty com seu comando 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.

Além disso, no seu script start_bukkit.sh , você não tem um conjunto PATH. Você chama java sem um caminho absoluto, portanto, ele pode não ser encontrado. Defina um PATH no início do script (prática recomendada) ou chame java pelo caminho absoluto ( /usr/bin/java ).

    
por 26.06.2012 / 15:02