Ich habe ein Skript, um meinen Minecraft-Server bei jedem Neustart zu starten. Ich kann in den Protokollen sehen, dass es die Eingabeaufforderung aufruft, aber es wird kein Bildschirm geöffnet. Wenn ich das Skript manuell ausführe, /home/minecraft/scripts/startMinecraft.sh
funktioniert es perfekt.
Hier ist meine Crontab:
@reboot /home/minecraft/scripts/startMinecraft.sh
38 00,06,12,16 * * * /home/minecraft/scripts/backup.sh
Es ist ein CentOS 6-Server.
Hier ist mein startMinecraft.sh
Skript.
screen -A -m -d -S minecraftserver /home/minecraft/scripts/startServer.sh
Wie ich bereits sagte, funktioniert es einwandfrei, wenn ich genau diese Zeile manuell ausführe.
Antwort1
Möglicherweise müssen Sie den vollständigen Pfad für Binärdateien festlegen, screen
da beim Ausführen des Cron-Jobs die $PATH-Werte nicht auf die gleiche Weise festgelegt sind wie bei Ihnen als Benutzer, wenn Sie sich über Terminal oder SSH anmelden.Diese Antwort auf Stack Overflowist eine gute Erklärung der ganzen Sache.
Daher empfehle ich Ihnen, Ihr Skript wie folgt zu ändern:
screen -A -m -d -S minecraftserver /home/minecraft/scripts/startServer.sh
Hierzu:
/path/to/screen -A -m -d -S minecraftserver /home/minecraft/scripts/startServer.sh
Und ersetzen Sie es /path/to/screen
durch den tatsächlichen vollständigen Pfad, den Sie ganz einfach mitwhich
so was:
which screen
Die Ausgabe sähe etwa so aus:
/usr/bin/screen
Oder Sie können $PATH festlegen, indem Sie es wie folgt in Ihr Skript einfügen:
PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
Natürlich sollte dies mit dem tatsächlichen PATH-Wert auf Ihrem System übereinstimmen, den Sie durch Eingabe des Folgenden erhalten:
echo $PATH
Ich persönlich bevorzuge jedoch die Fullpath-Methode, da sie für mich übersichtlicher ist und sich $PATH-Werte häufig ändern, sodass Sie in Ihren Bash-Skripten keinen Wunsch-Mash aus Werten haben möchten.
PS: Eine Kleinigkeit noch, aber Ihr Bash-Skript sollte den aktuellen Bash-Interpreterwert in der"Kram"oben so, sodass Ihr Skript ungefähr so aussehen würde:
#!/bin/bash
/path/to/screen -A -m -d -S minecraftserver /home/minecraft/scripts/startServer.sh
Natürlich /bin/bash
sollte dies mit dem tatsächlichen Bash-Pfad Ihres Systems übereinstimmen, aber ich bezweifle, dass es bei einer modernen Installation which bash
nicht im Pfad enthalten wäre ./bin/bash