Problem mit Cronjob...

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Moin...

    Ich hab n kleines Problem mit nem Cronjob...

    Der entsprechende Eintrag in der crontab sieht wie folgt aus:

    45 04 01-06 01 01-05 sudo /home/pi/folder/./machwas.sh

    Sollte eigentlich ausgeführt werden um 4:45 Uhr vom 01.-06. Januar aber nur von Mo-Fr...

    Um so verwunderlicher ist es, das die Aktion auch am 07.01. 08.01. .... ausgeführt wurde...

    Hab ich da n Denkfehler?

    LG Tiieto

  • Hofei

    Vielen Dank für den stubs in die richtige Richtung...

    Kann Dir im verlinkten Thema nur zustimmen Tage im Monat & Wochentage stehen in ODER Verknüpfung zueinander...

    Um mal Deine Lösung heranzuziehen:

    Code
    00 05 * * 7 [ $(date +\%d) -le 07 ] &&  /bin/sh /pfad/zu/script.sh

    So ist mir nicht ganz klar was genau da steht...

    5 Uhr Morgens - klar

    jeder Tag - auch klar

    Jeder Monat - easy peasy...

    Aber das mit dem Wochentag raff ich nicht...

    Könntest Du mir das evtl mal aufschlüsseln?

    Danke...

    LG

  • 00 05 * * 7

    -> Jeden Sonntag im Monat um 5.00 Uhr

    nur bis zum Zitierten geht die Definition der Ausführungszeit.

    Das was dich verwirrt ist wohl das hier:

    [ $(date +\%d) -le 07 ]

    und das ist schon ein Befehl, einfach mal in der Konsole ausführen.

    Der Befehl ansich ist so aufgebaut:

    Code
    date +\%d
    --> 09  # Da heute der 09. Januar ist ;)

    anschließend wird das "09" in die Variable übergeben, das macht das Zeichen und die Klammern, -le 07 bedeutet, ist die Variable kleiner als 07.

    Der nachfolgende Befehl (/bin/sh /pfad/zu/script.sh)ist mit &&  Verknüpft. Das && bewirkt, dass das nachstehenden nur ausgeführt wird, wenn das davor stehende True ergibt (oder erfolgreich ausgeführt wurde).

    Da der Cron jeden Sonntag ausgeführt wird, wird auch jeden Sonntag der Teil ausgeführt [ $(date +\%d) -le 07 ] aber nur einmal im Monat ist der Sonntag an einem Tag der kleiner ist als 07. Somit wird /bin/sh /pfad/zu/script.sh nur einmal im Monat an einem Sonntag ausgeführt.

  • OK... Denke ich hab das verstanden...

    Meine Zeile im Crontab - sofern ich das richtig verstanden habe, müsste dann also von

    Code
    45 04 01-06 01 01-05 sudo /home/pi/folder/./machwas.sh

    auf

    Code
    45 04 01-06 01 01-05 [ $(date +\%d) -le 06 ] && sudo /home/pi/folder/./machwas.sh

    geändert werden...

    4:45 Uhr morgens

    01. bis 06. Januar

    Mo-Fr

    sofern der Tag im Monat kleiner 06 ist..

    Wäre das so korrekt? Oder ist da noch n knick in ner Hirnwindung?

    LG

  • ja, denk schon. Muss man natürlich probieren ;)

    Aber das sudo muss raus.

    wenn root rechte benötigt werden, dann erstell den crontab für root

    Code
    sudo crontab -e

    EDIT:

    Hier noch eine (viel elegantere) Lösung von llutz

    Code
    45 4 1-6 1 * [ $(date +\%u) -lt 6 ] && command
  • Hallo...

    Das hat bisher super funktioniert...

    Allerdings ergibt sich jetzt ein Szenario wo das andersrum ausgeführt werden müsste..

    Also nur dann ausführen, wenn der Day of Month größer x ist...

    funktioniert das über "+le x"?

    Gruß Tiieto

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!