Skript funktioniert nicht in Crontab

Skript funktioniert nicht in Crontab

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

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, screenda 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/screendurch den tatsächlichen vollständigen Pfad, den Sie ganz einfach mitwhichso 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/bashsollte dies mit dem tatsächlichen Bash-Pfad Ihres Systems übereinstimmen, aber ich bezweifle, dass es bei einer modernen Installation which bashnicht im Pfad enthalten wäre ./bin/bash

verwandte Informationen