Wie behebe ich den Crontab fehler?

3 Antworten

@reboot <username> /Netzwerk/Minecraft/BauServer/start.sh >/dev/null 2>&1

Schau mal ins Logfile, ob da etwas zu sehen ist.

Ich muß mich korrigieren, bei User Crontabs entfällt das Feld mit dem Username.


BoomCrafterXDHD 
Beitragsersteller
 27.12.2022, 22:07

da wird doch aber keine erstellt oder wo muss ich kucken

KarlRanseierIII  27.12.2022, 22:51
@BoomCrafterXDHD

Ansich logged cron schon, was er so in etwa macht:

Dec 27 04:02:01 [CROND] (root) CMD ([ ! -f /etc/cron.hourly/0anacron ] && run-parts /etc/cron.daily)
Dec 27 04:02:04 [CROND] (root) CMDEND ([ ! -f /etc/cron.hourly/0anacron ] && run-parts /etc/cron.daily)
Dec 27 05:01:01 [CROND] (root) CMD (run-parts /etc/cron.hourly)
Dec 27 05:01:01 [CROND] (root) CMDEND (run-parts /etc/cron.hourly)

Du hast ja STDIN/STDERR nach /dev/null umgeleitet, das würde sonst im ZWeifelsfall auch an dne user gemailed.

KarlRanseierIII  27.12.2022, 22:56
@KarlRanseierIII

Und vielleicht noch als Anmerkung, die crontab selbst muß reguläre Datei sein (oder link auch reguläre Datei) darf nicht ausführbar sein und nur der BEsitzer darf Schreibrechte haben - Das könnte allerdings mit der Implementierugn variieren.

Unter Umständen sollte die crontab Datei so aussehen:

To run /usr/bin/sample.sh at 12.59 every day and supress the output

59 12 * * * simon /usr/bin/sample.sh > /dev/null 2>&1

wobei simon der User ist, mit dem der Server gestartet werden soll.

Die Befehlszeile im crontab wird nicht von sh ausgeführt, damit werden die Redirektionen wie 2>&1 vermutlich nicht verstanden.

Willst du einen shell script starten, kann es unproblematischer sein, statt den script aufzurufen, stattdessen den Befehlszeileninterpreter, also die shell in dem Fall, aufzurufen, und der den Pfad zum Script und dessen Namen als Argument mitzugeben. Das räumt z.B. auch mit nicht gesetzten eXecute flags in den Permissions vom Script auf.

Und als weitere Möglichkeit würde sich anbieten, die beim boot gewünschten Aktionen aus /etc/rc.local auszuführen, statt vom crond.

Wenn das der system crontab ist, und nicht der User crontab, dann fehlt noch der Name des users, der Eigentümer vom Prozess wird.


KarlRanseierIII  27.12.2022, 23:05
Die Befehlszeile im crontab wird nicht von sh ausgeführt, damit werden die Redirektionen wie 2>&1 vermutlich nicht verstanden.

Ich zitiere einfach mal:

 The entire command portion of the line, up to a newline or a "%" character, will be executed
      by /bin/sh or by the shell specified in the SHELL variable of the cronfile. A "%" character in the command, unless escaped with a backslash (\), will be changed into
      newline characters, and all data after the first % will be sent to the command as standard input.
Bushmills145  27.12.2022, 23:19
@KarlRanseierIII

Danke für Korrektur. Dann sollte Fragesteller meinen ersten Absatz besser ignorieren, da falsch.

Ich lass ihn trotzdem in der Antwort, sonst ist nicht deutlich, worauf sich das Zitat bezieht.

KarlRanseierIII  27.12.2022, 23:24
@Bushmills145

Ach, ich habe das mit dem Nutzernamen verpeilt. So Sachen passieren, nicht jede Implementierung ist ja exakt gleich, nicht jede Umgebung verhält sich identisch. Aber über das exec() mit /bin/sh scheint halbwegs Konsens zu herrschen :-D.