Pantalla separada en un host remoto

Pantalla separada en un host remoto

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 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.

Además, en su secuencia de comandos start_bukkit.sh, no tiene una RUTA configurada. Llamas javasin una ruta absoluta, por lo que es posible que no se encuentre. Establezca una RUTA al comienzo del script (mejor práctica) o llame javaa través de la ruta absoluta ( /usr/bin/java).

información relacionada