
Tengo un script local que ejecuta un script remoto a través de ssh. El script local es minecraft.php:
ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i {$this->pemkey} {$this->ssh_user} sudo /vol/start_bukkit.sh
El script remoto es /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
Lo que sucede es que el comando java funciona e inicia craftbukkit.jar, pero la pantalla no abre una nueva ventana. ¿Qué está sucediendo? ¿Cómo se puede crear una nueva ventana?
Si inicio sesión en el servidor remoto y ejecuto start_bukkit.sh, la pantalla funciona como se esperaba, creando una ventana recién separada que ejecuta craftbukkit.jar en ella.
EDITAR:
Yo tengo que trabajar. Actualicé el script local eliminando el sudo e ingresando el comando de pantalla. Aquí 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
En el lado remoto eliminé el comando de pantalla:
#!/bin/bash
cd "/vol/bukkit"
/usr/local/bin/java -Xnoclassgc -Xms1024M -Xmx1024M -jar /vol/bukkit/craftbukkit.jar nogui
No puedo explicar por qué esto funciona.
Respuesta1
Intente forzar un psuedo-tty con su 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.
Además, en su secuencia de comandos start_bukkit.sh
, no tiene una RUTA configurada. Llamas java
sin una ruta absoluta, por lo que es posible que no se encuentre. Establezca una RUTA al comienzo del script (mejor práctica) o llame java
a través de la ruta absoluta ( /usr/bin/java
).