Cron-Job wird nach einer Zeitzonenänderung nicht gestartet

13

Ich habe versucht, viele der häufigsten Fehler zu beseitigen,

  1. sicherstellen, dass die PATHs für cron verfügbar sind

  2. Am Ende der crontab-Datei befindet sich eine Endzeile

  3. Die Zeitzone wird eingestellt von:

    cd /etc
    cp /usr/share/zoneinfo/Asia/Singapore /etc/localtime
    

Laufen datein bash, erhalte ich:

Tue Sep 17 15:14:30 SGT 2013

Um zu überprüfen, ob cron dieselbe Zeit verwendet,

* * * * * date >> date.txt

gibt das gleiche Datum in date.txt aus.

Dies ist das Skript, das ich ausführen möchte:

event.sh:

#!/usr/bin/env bash
echo data > /root/data.txt

Mit crontab -eder folgenden Zeile funktioniert,

* * * * * /bin/bash /root/event.sh >/tmp/debug.log 2>&1

15 * * * * /bin/bash /root/event.sh >/tmp/debug.log 2>&1

Als ich jedoch einige andere Argumente ausprobierte, hoffte ich, dass es um 14.00 Uhr laufen würde:

50 14 * * * /bin/bash /root/event.sh >/tmp/debug.log 2>&1

oder

50 14 * * * (cd /root ; ./event.sh >/tmp/debug.log 2>&1)

es wird nicht mehr funktionieren. Scheint, als gäbe es ein Problem mit meinem Stundenargument. Auch in der /tmp/debug.logDatei konnte nichts gefunden werden .

LÖSUNG:

Es stellte sich heraus, dass ich den Cron-Dienst neu starten muss, nachdem ich Änderungen an TZ vorgenommen habe.

adsisco
quelle
1
Irgendwelche Fehler in den Protokollen? können Sie bitte mit absoluten Pfad ~/event.shversuchen, anstatt mit/home/username/event.sh
Rahul Patil
1
Machen Sie auch kleine Änderungen wie* * * * * /bin/bash /root/event.sh >/tmp/debuge.log 2>&1
Rahul Patil
1
Sie sagen, dass die Zeitzone korrekt eingestellt ist, sind sich aber absolut sicher ? Versuchen Sie, einen Eintrag wie diesen hinzuzufügen, * * * * * dateund bestätigen Sie, dass datedie erwartete Zeit angezeigt wird. Beachten Sie, dass die Variable TZ - Umgebung innerhalb der crontab möglicherweise nicht die Zeitzone beeinflussen als Daemon selbst durch den cron verwendet, aber es wird Prozesse durch cron gestartet beeinflussen, wenn Sie also TZ in crontab stelle ich es vorübergehend zu kommentieren würde vorschlagen , dass aus und Festlegen der Uhrzeit mithilfe der Zeitzone der Systemuhr (wahrscheinlich UTC, wenn Sie Linux einmal booten, aber möglicherweise die Ortszeit verwenden).
ein CVn
1
Sie verpassen den Punkt, @adsisco. Ich bitte Sie, alle TZ-Direktiven zu entfernen, die sich möglicherweise in der Crontab befinden, und es dann erneut zu versuchen. Das wird mit dem gleichen TZ machen Datum als cron ausführen Daemon selbst nicht, lassen Sie uns sehen , was die Zeitzone cron will in die Zeitfelder. / Etc / localtime nur Anzeige betrifft, nicht die Systemuhr, und ich bezweifle , es wirkt sich cron. Durch diesen Test können wir sicher sein , dass Ihr Problem in keiner Weise mit Zeitzonen zusammenhängt (was mir offen gesagt so vorkommt).
ein Lebenslauf vom
1
Eigentlich glaube ich, ich habe es nur durch einen Neustart des Systems behoben ... könnte es sein, dass ich den Cron-Dienst neu starten muss, nachdem ich Änderungen an TZ vorgenommen habe? @ MichaelKjörling. VIELEN DANK! für den Hinweis auf mögliche Zeitzonenprobleme.
Adsisco

Antworten:

7

Zunächst scheint die Wahrscheinlichkeit, dass Sie einen Fehler finden, der dazu führt, dass ein Feld falsch berücksichtigt wird, außergewöhnlich gering zu sein. Es ist eher ein Missverständnis dessen, was los ist und was cron erwartet.

In diesem Fall haben wir in den Kommentaren zur Frage festgestellt, dass es sich höchstwahrscheinlich um ein Problem mit der Zeitzone handelt. Dafür würden Sie:

  • Füge einen Eintrag wie * * * * * dateauf der Crontab hinzu
  • Entfernen Sie alle TZ-Zuweisungen von der Crontab (oder kommentieren Sie sie aus)

Dies erzwingt datedie Ausführung mit der Zeitzoneneinstellung des Aufrufers, dh des Cron-Dämons . Sieh Dir die Ausgabe an. es wird angezeigt, welche Zeitzone cron intern verwendet und daher höchstwahrscheinlich in welcher Zeitzone es seine Zeitfelder haben möchte. Wenn Sie eine TZ-Zuweisung in der crontab haben, ist es leicht möglich, dass die TZ-Umgebungsvariablenzuweisung an das übergeben wird Aufgerufene Befehle, aber cron selbst verwendet eine andere Zeitzone . Indem Sie die TZ-Zuordnung auskommentieren oder entfernen, vermeiden Sie diese Mehrdeutigkeit.

Beachten Sie außerdem, dass Änderungen an den globalen Zeitzoneneinstellungen des Systems (einschließlich z. B. / etc / localtime) mit ziemlicher Sicherheit mindestens einen Neustart des Cron-Daemons und möglicherweise (wenn auch unwahrscheinlich) einen Neustart des Systems erfordern, damit dieser vollständig wirksam wird. Das Bearbeiten der TZ-Zuweisung in der crontab sollte kein Neuladen des cron-Daemons erfordern, da es feststellen sollte, dass die Datei geändert wurde, und sie automatisch neu laden.

ein CVn
quelle