Erstellen Sie mit contab eine Bildschirmsitzung mit einem Bash-Skript

8

Ich möchte, dass bei jedem Start des Servers eine JAR-Datei ausgeführt wird (wir verwenden einen VPS). Daher habe ich crontab mithilfe von crontab -eund anschließendem Hinzufügen bearbeitet @reboot bash /home/bash/startserver.sh. Aber ich bin noch nicht einmal an dem Punkt angelangt, an dem das Skript überhaupt funktioniert.

Hier ist mein Skript:

#!/bin/bash
screen -S bukkit
cd $HOME/server
java -jar bukkit.jar

Der Grund, den ich verwenden muss, screenist, dass wenn ich bukkit.jar starte, es in eine Konsole gelangt, in der ich weitere Befehle für dieses Programm eingeben kann (ich bin sicher, dass Sie alle mit Minecraft und seinen Servern auf dieser Site vertraut sind , haha), aber ich muss in der Lage sein, andere Befehle als root und für andere Programme auszuführen, während es ausgeführt wird, und sogar meine PuTTY-Sitzung schließen.

Das einzige Problem besteht darin, dass beim Ausführen dieses Skripts eine Bildschirmsitzung erstellt wird, die ID jedoch nicht aufgeführt ist screen -ls, da die ID leer ist. Vielmehr muss ich gehen, /run/screen/S-rootum die ID zu finden und dann die typische screen -X -S $name quitdarauf zu verwenden.

Vielleicht ist das gar nicht möglich, oder vielleicht gibt es tatsächlich einen einfacheren Weg, dies zu tun (ich würde es einfacher lieben), aber ich kann nicht herausfinden, warum dies nicht funktioniert. Und wenn dies möglich ist, ist es dann möglich, sich einer Sitzung wieder anzuschließen, screen -S bukkitwenn ein Bash-Skript ausgeführt wird? (Mehrere Fragen, denke ich, aber vielen Dank für Ihre Hilfe! (Klammern))

Jacob Larson
quelle

Antworten:

14

Starten Sie den Bildschirm im getrennten Modus und lassen Sie ihn Ihren Befehl darin ausführen:

screen -d -m -S bukkit bash -c 'cd $HOME/server && java -jar bukkit.jar'

Möglicherweise möchten Sie ein dediziertes Skript erstellen bukkit.sh:

#!/bin/bash -e
cd ~/server
java -jar bukkit.jar

Wenn das Skript komplexer wird, müssen Sie keine lange Zeile für schreiben screen, und der screenBefehl kann einfach gleich bleiben:

screen -d -m -S bukkit path/to/bukkit.sh
Janos
quelle
1
Ich habe versucht, beide Optionen auszuführen, die mit einer längeren Datei und die mit zwei separaten Dateien, aber jetzt wird die Bildschirmsitzung überhaupt nicht mehr erstellt. Ich habe versucht, die Befehle direkt über die Befehlszeile auszuführen, aber das hat auch nicht funktioniert ..: /
Jacob Larson
Erhalten Sie eine Fehlermeldung oder etwas? Lassen Sie zuerst das bukkit.shSkript in der Befehlszeile arbeiten. Überprüfen Sie als nächstes, ob dies screen -S bukkit path/to/bukkit.shfunktioniert. Überprüfen Sie als nächstes, ob dies screen -d -m -S bukkit path/to/bukkit.shfunktioniert. Zum Schluss Cron einrichten. Versuchen Sie zuerst das Einfachste und machen Sie kleine Schritte, damit Sie verstehen, welcher Schritt unterbrochen wird. Sagen Sie mir das und die Fehlermeldung, die Sie erhalten, wenn Sie Hilfe benötigen.
Janos
1

Sie sollten update-rc.dwie folgt vorgehen, um den Dienst beim Booten einzuschalten:

# update-rc.d cron defaults
Maythux
quelle
@ JacobLarson Gern geschehen. Es ist besser, als Antwort zu markieren und zu bewerten, wenn dies Ihnen hilft
Maythux