- Affected App
- WoltLab Suite Core
Falsche Berechnung des Ausführungsdatums
Der Fehler liegt in wcf/lib/data/cronjobs/CronjobsExec.class.php auf Zeile 948 (bzw. Zeile 934).
Da wird der Tag der Woche mit dem aktuellen Jahr berechnet, auch wenn der Zeitpunkt der Ausführung eigentlich schon im nächsten Jahr ist. Das sorgt dann dafür, das man bei Angabe das man immer Montags den Cronjob ausführen will dieser dann aktuell erst am 06.01.2011 ausgeführt wird, was ja nicht Montag ist.
Generell kann es da auch sonst zu Problemen kommen, da ja hier mit der Variable timebase gearbeitet wird, die normalerweise der aktuelle Zeitpunkt sein dürfte.
Daher gibt es auch dann Probleme wenn man einen Cronjob am Ende eines Monats neu berechnet, dann wird da auch der falsche Ausführungszeitpunkt errechnet.
Das heißt also, das Cronjobs die an einem bestimmten Wochentag ausgeführt werden sollen nicht zuverlässig sind, da der nächste Ausführungszeitpunkt zu bestimmten Zeiten (Jahreswechsel, Monatswechsel) nicht korrekt berechnet wird.
Ich überlege mir gerade wie man das beheben kann. Leider ist der Cronjob-Code ja recht komplex, wobei das in meinen Augen nicht wirklich notwendig wäre.
Wesentlich einfacher (in Codelänge und Komplexität) wäre es, wenn einfach beim Abarbeiten der Cronjobs geprüft würde, ob der Cronjob ausgeführt werden soll oder nicht und nicht das man das nächste Ausführdatum neu berechnet.