• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst] crontab läuft nicht

Hallo,

ich habe da ein Problem mit einem Befehl. In der Bash oder sh läuft er ohne Probleme
Code:
[ `/bin/date -d tomorrow +%d` -eq '01' ] && /tools/mk_external_links.sh
Dann habe ich ihn in der crontab eingetragen
Code:
55 23 * * * [ `/bin/date -d tomorrow +%d` -eq '01' ] && /tools/mk_external_links.sh
Dort läuft er aber nicht an.
Schau ich mir den messagelog an erhalte ich
Code:
Mar 31 09:30:01 LINUX-1 /usr/sbin/cron[23897]: (root) CMD ([ `/bin/date -d tomorrow +)
dann noch einmal zur crontab
Im editor ändert sich die "Farbe"
55 23 * * * [ `/bin/date -d tomorrow +%d` -eq '01' ] && /tools/mk_external_links.sh
exakt hinter dem +

Was hab ich falsch gemacht ?

Gruss

Rolf
 
Du hast hinter dem "%d" ein Backtick (`) , der eine Subshell bzw. der Shell sagt, dass sie den folgenden Befehl in einer Subshell ausführen soll.
 
Bau aus deinem Aufruf ein Bash-Skript und rufe dieses dann per cron auf. Wenn es ausführbar ist und Du immer schön absolute Pfade verwendest, sollte es keine Probleme geben.
 
Hallo ,

danke für die Antworten.

@Geier0815

Mit dem crontab Aufruf über ein script funktioniert es. Danke.

@Spoensche & andere
spoensche schrieb:
Du hast hinter dem "%d" ein Backtick (`) , der eine Subshell bzw. der Shell sagt, dass sie den folgenden Befehl in einer Subshell ausführen soll.
Nur aus Interesse
( der cronjob scheint aber auch schon beim "+" zu Enden. Auch ist bei crontab -e nach dem "+" alles "lila". Also merkt da der Editor auch schon was ??? )
Wie müsste den der Ausdruck aussehen, damit er auch in einer Zeile in der crontab läuft. Würde das auch ohne ein von der Crontab ausgeführtes script funktionieren ?

Gruss

Rolf
 
A

Anonymous

Gast
fredy82 schrieb:
Wie müsste den der Ausdruck aussehen, damit er auch in einer Zeile in der crontab läuft. Würde das auch ohne ein von der Crontab ausgeführtes script funktionieren ?

das wird ein mal mehr interpretiert so das du das % maskieren musst damit es dann in der Shell auch richtig ankommt.
Außerdem würde ich die Sonderzeichen hier möglichst vermeiden. "[" müsstest du sonst sowieso richtigerweise "/usr/bin/[" schreiben.
Den Test würde ich auf Stringbasis laufen lassen, da bei date mit dem Format %d zB "01" kommt und dieses auf Shellebene sonst als Oktalzahl gewertet wird, das macht eventuell Probleme wenn du mal auf ein anderes Datum gehst.

Also Summa Summarum, folgendes habe ich getestet und lief.
Code:
* * * * * /usr/bin/test $(/bin/date  -d tomorrow  +\%d) = 01  && /bin/logger hallo


robi
 
Hallo robi,

danke für die Tips

Code:
55 23 * * * [ `/bin/date -d tomorrow +\%d` -eq '01' ] && /tools/mk_external_links.sh
14 22 * * * $(/bin/date -d tomorrow +\%d) = 01  && /tools/mk_external_links.sh
Das maskieren war das Problem.

Beides funktioniert , wobei mir das zweite wesentlich besser gefällt.

Gruss

Rolf
 
Oben