
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 ssh
comando.
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 java
sem um caminho absoluto, então pode não ser encontrado. Defina um PATH no início do script (melhor prática) ou chame java
pelo caminho absoluto ( /usr/bin/java
).