Claudia: cron Monatstag 31 - was passiert in kuerzeren Monaten?

Hallo

Ich bin gerade dabei ein kleines PHP-skript zu schreiben, das aus einer (einfachen) Cron-Zeitangabe wie '59 23 31 12 *' ausrechnen soll, wann ein Skript das naechste mal laufen muss.

Ich weiss aber nicht, was passiert, wenn als Monatstag die 31 angegeben wird, der Monat aber gar keine 31 Tage hat. In der man page scheint dazu nichts zu stehen.

Gibt es irgendwo eine halbwegs offizielle Dokumentation, wo das Verhalten in diesem Fall erlaeutert wird?

Danke

Claudia

  1. Moin!

    Ich bin gerade dabei ein kleines PHP-skript zu schreiben, das aus einer (einfachen) Cron-Zeitangabe wie '59 23 31 12 *' ausrechnen soll, wann ein Skript das naechste mal laufen muss.

    Ich weiss aber nicht, was passiert, wenn als Monatstag die 31 angegeben wird, der Monat aber gar keine 31 Tage hat. In der man page scheint dazu nichts zu stehen.

    Kann man am 31. November ein Skript starten? Nein, weil es den Tag nicht gibt. Kann man wollen, dass am 31. November ein Skript starten könnte? Nein, weil es den Tag nicht im Kalender gibt.

    Der Admin der Crontab hat also sein Hirn einzuschalten und dafür zu sorgen, dass seine monatlichen Jobs gefälligst nur im Bereich 1. bis 28. laufen, wenn er das garantiert monatlich haben will. Oder er nutzt die diversen Alternativen für monatliche Ausführung, z.B. /cron.monthly/. Oder legt explizit für jeden Monat die Ausführung expliziter fest (was beim Februar die Schaltjahre unberücksichtigt lassen muss).

    Gibt es irgendwo eine halbwegs offizielle Dokumentation, wo das Verhalten in diesem Fall erlaeutert wird?

    Das kann man sich aus den diversen Fragen ableiten, die man bekommt, wenn man mal nach dem Problem "Cronjob am letzten Tag des Monats starten" googelt. Resultat: Das ist ein komplizierteres Problem, welches in der Regel dadurch gelöst wird, dass der Job an jedem der POTENTIELL letzten Tage (oder sowieso täglich) gestartet wird und dann selbst feststellt, ob der Monatsletzte ist.

    - Sven

    1. Hallo Sven

      Danke fuer die Antwort.

      Das es nicht unbedingt praktisch ist, den 31. jedes Monats als Ausfuehrungsdatum anzugeben, ist mir klar. Ich haette halt gern in meinem Skript das Verhalten der Zeitsteuerung von cronjobs einigermassen genau nachgebaut, deswegen hatte ich nach einer Dokumentation gefragt. Die allgemeine Meinung scheint zu sein, dass nicht eintretende Tag/Monat-Kombinationen einfach ignoriert werden, also werde ich dies auch so machen.

      Einen schoenen Abend noch

      Claudia

    2. Hi,

      Der Admin der Crontab hat also sein Hirn einzuschalten und dafür zu sorgen, dass seine monatlichen Jobs gefälligst nur im Bereich 1. bis 28. laufen, wenn er das garantiert monatlich haben will. Oder er nutzt die diversen Alternativen für monatliche Ausführung, z.B. /cron.monthly/. Oder legt explizit für jeden Monat die Ausführung expliziter fest (was beim Februar die Schaltjahre unberücksichtigt lassen muss).

      Man könnte am 27. Februar per cron ein Script laufen lassen, das den cron-Eintrag für den 28.02. oder den 29.02. macht ... ;-)

      cu,
      Andreas

      --
      Warum nennt sich Andreas hier MudGuard?
      O o ostern ...
      Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.