
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.sh
haben Sie in Ihrem Skript keinen PATH festgelegt. Sie rufen java
ohne 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.