Getrennter Bildschirm auf einem Remote-Host

Getrennter Bildschirm auf einem Remote-Host

Ich habe ein lokales Skript, das ein Remote-Skript über SSH ausführt. Das lokale Skript ist minecraft.php:

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

Das Remote-Skript ist /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

Was passiert, ist, dass der Java-Befehl funktioniert und craftbukkit.jar startet, aber screen kein neues Fenster öffnet. Was ist los? Wie kann ein neues Fenster erstellt werden?

Wenn ich mich beim Remote-Server anmelde und start_bukkit.sh ausführe, funktioniert der Bildschirm wie erwartet und erstellt ein neu getrenntes Fenster, in dem craftbukkit.jar ausgeführt wird.

BEARBEITEN:

Ich habe es zum Laufen gebracht. Ich habe das lokale Skript aktualisiert, indem ich das sudo entfernt und den Bildschirmbefehl eingefügt habe. Hier ist es:

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

Auf der Remote-Seite habe ich den Bildschirmbefehl entfernt:

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

Ich kann nicht erklären, warum das funktioniert.

Antwort1

Versuchen Sie, mit Ihrem Befehl ein Pseudo-TTY zu erzwingen 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.

Außerdem start_bukkit.shhaben Sie in Ihrem Skript keinen PATH festgelegt. Sie rufen javaohne absoluten Pfad auf, sodass dieser möglicherweise nicht gefunden wird. Legen Sie entweder am Anfang des Skripts einen PATH fest (Best Practice) oder rufen Sie javaüber den absoluten Pfad ( /usr/bin/java) auf.

verwandte Informationen