Ich habe ACPI Wakeup eingerichtet, damit mein Laptop jeden Morgen zu einer bestimmten Zeit aufwacht. Die Zeitzone hierfür ist UTC. Ich möchte meine Crontabs auch mit UTC einrichten, damit sie zum Weckalarm passen.
Wie machst du das?
Ich habe versucht, folgende Elemente /etc/default/cron
zu bearbeiten :
TZ="UTC"
aber es geht nicht. (Ich habe es auch versucht TZ=UTC
und TZ="UTC/GMT"
)
Irgendwelche Ideen?
sudo service cron restart
nachbearbeitung gemacht?Antworten:
Ich hatte ein ähnliches Problem bei Trusty (14.04). Das Problem wurde behoben, indem die Zeitzone des Computers festgelegt und der
cron
Dienst neu gestartet wurdesudo dpkg-reconfigure tzdata
- Befolgen Sie die Anweisungen zur Auswahl von Region / Landsudo service cron restart
quelle
date
in die Befehlszeile eingeben, um zu bestätigen, dass das Datum Ihren Erwartungen entspricht.Es gibt keinen einfachen Weg, dies zu erreichen. cron verwendet die Ortszeit.
/etc/default/cron
und andereTZ
spezifikationen in der crontab geben nur an, wasTZ
für die von cron gestarteten prozesse verwendet werden soll, dies hat keinen einfluss auf die startzeit.Die meisten Lösungen, die ich gesehen habe, beinhalten ein Dienstprogramm in der Mitte, so dass cron etwas auslöst, das dann bestimmt, wann es in UTC losgeht (z. B. wenn Sie wissen, dass Sie nur über DST-Änderungen besorgt sind, starten Sie es 2 Stunden vorher, berechnen Sie die Zeitdifferenz, und es beginnt dann. auf einen Blick hat
at
. Um das zu tun, verwenden die Menschen oftperl
oderpython
oder ähnliche Skriptsprachen).Es gibt einen fiesen Weg, es zu hacken, wenn Sie wollten. cron liest die TZ-Informationen nur beim Systemstart aus. Wenn dies also ein ständig laufender Server ist, können Sie TZ einfach auf UTC einstellen, neu starten und nach dem Start auf Ihre lokale Zeitzone einstellen. Sie könnten dies auch skripten.
Schauen Sie sich alternativ auch die
@reboot
Syntax von cron an, die nach dem Booten Skripte ausführen sollte, was sich nach Ihren Wünschen anhört.quelle
Es gibt eine Datei, die die Zeitzone des Systems steuert. Ich habe gerade das gleiche Problem, hier ist die Lösung:
Wenn Sie keine Zeitzone manuell konfiguriert haben,
date
sollte beim Ausführen die UTC-Zeit angezeigt werden.Erstellen Sie ein Backup
entferne die Datei:
Ich wohne in Chicago (möglicherweise müssen Sie den Pfad mithilfe der Tabulatortaste ändern), um Folgendes zu tun:
Starten Sie dann neu. Wenn Ihr Systemstart durchgeführt wird: Datum
Jetzt sollte deine Zeitzone da sein und cron wird sich das ansehen.
Zu Ihrer Information: Das Festlegen der TZ-Variablen ist eine vorübergehende Lösung und kann manchmal als "Maske" fungieren.
quelle
date
ohne Neustart gearbeitet, und ein Neustart des Betriebssystemssudo service crond restart
war genug, um meine Cron-Job-Zeiten zu korrigieren.Ab März 2017 habe ich festgestellt, dass crond die Variable CRON_TZ in jeder Crontab unterstützt.
- Zitat aus der Manpage von crontab (5)
Auf diese Weise konnte ich die Zeit für die Ausführung jedes Cronjobs in lokaler Zeit angeben, die automatisch die Sommerzeit abrechnete, während der Server in UTC blieb.
quelle
ls /usr/share/zoneinfo/America
, um die Optionen anzuzeigen.OK, ich habe mir etwas Zeit genommen und herausgefunden, wie das mit Ubuntu Natty geht. Und so habe ich es gemacht. Es mag einen eleganteren Weg geben, aber dieser Weg funktioniert.
Zuerst müssen wir die Cron-Programmdatei in eine Shell einbinden, die die TZ-Variable setzt. Hier ist wie:
Erstellen Sie dann eine neue Datei / usr / sbin / cron. Ich habe vim verwendet, aber Sie können einen beliebigen Editor verwenden. Lassen Sie die Datei einfach so aussehen:
Machen Sie die neue Cron-Datei ausführbar:
Starten Sie nun den Cron-Daemon neu:
Ihre Cron-Jobs werden jetzt nach einem UTC-basierten Zeitplan ausgeführt. Die Zeitzone wird jedoch auf die für das System festgelegte Zeit eingestellt, auch wenn die Zeit, zu der sie ausgeführt werden, UTC ist. Um dies zu ändern, fügen Sie dies in Ihre crontab ein, bevor Sie Befehle eingeben:
So sieht Ihre Crontab etwa so aus:
quelle
Sehen
/etc/default/cron
. Sie könnenTZ
hier -all- crontabs einstellen und es sollteTZ=UTC
iirc sein. Ihre Methode hätte also funktionieren sollen.Schauen Sie sich fcron an . Sie können einzelne Crontabs in verschiedenen Zeitzonen einstellen:
timezone-name 'time zone of the system'
Führen Sie den Job in der angegebenen Zeitzone aus. timezone-name ist eine Zeichenfolge, die für die Umgebungsvariable TZ gültig ist. Weitere Informationen finden Sie in der Dokumentation Ihres Systems. Beispielsweise ist "Europe / Paris" auf einem Linux-System gültig. Diese Option behandelt Änderungen der Sommerzeit korrekt. Die Umgebungsvariable TZ wird auf den Wert der Zeitzone gesetzt, wenn ein Job ausgeführt wird, der diese Option definiert.
Beachten Sie, dass ein falsches Argument für den Zeitzonennamen STILLSCHWEIGEND ignoriert wird und der Job in der Zeitzone des Systems ausgeführt wird.
quelle
In meinem nächsten Beitrag finden Sie eine Ubuntu-spezifische Lösung
Ich weiß, dass dies ein Ubuntu-Forum ist, aber ich glaube, die Antwort wird sehr ähnlich sein, wie Sie dies auf einem Red Hat-System tun würden. Ich habe kein Ubuntu-System, um dies zu testen, aber ich habe es auf Red Hat getestet.
Alles, was Sie tun müssen, ist eine Zeile in Ihr Cron-Daemon-Init-Skript einzufügen. Setzen und exportieren Sie die Umgebungsvariable TZ wie folgt:
Starten Sie dann Ihren Cron-Daemon neu. Stellen Sie sicher, dass Sie diesen Export in das Startskript des Cron-Daemons nach jeder anderen Variableneinstellung und Quellenangabe einfügen. Ich denke, dies könnte der Grund dafür sein, dass die Bearbeitung des
/etc/default/cron
Skripts durch den ursprünglichen Poster für ihn nicht funktioniert hat. Vielleicht hat er es eingestellt, aber es wurde dann von etwas anderem weiter unten im Skript zurückgesetzt.Beachten Sie, dass dies nur den Cron-Daemon selbst betrifft und nicht die Jobs, die Sie über Cron ausführen. Wenn Sie also möchten, dass ein Cron-Job UTC als Zeitzone verwendet, müssen Sie ihn auch im Job selbst festlegen.
Sie können dieses Skript wahrscheinlich nicht wörtlich kopieren und auf einer Ubuntu-Box verwenden, aber hier ist das Init-Skript, mit dem ich es auf Red Hat getestet habe. Sie finden den Export direkt vor der
start()
Funktion:quelle
Habe das gerade auf Ubuntu 14/16 herausgefunden. Arbeitete perfekt für mich.
Schritte (sudo impliziert):
quelle
Was ist mit der Auswertung der UTC-Zeit in einem Shell-Skript? Planen Sie die stündliche Ausführung des Shell-Skripts. Holen Sie sich oben im Skript die UTC-Stunde aus dem Datumsbefehl. Wenn es nicht die UTC-Stunde ist, die Sie möchten, beenden Sie.
Dieses Skript wird beendet, wenn es nicht 1 Uhr UTC ist.
quelle
Sie können die Umgebungsvariable CRON_TZ festlegen. Wenn der Cron-Job auf einem Remote-Server ausgeführt wird, sollten Sie wahrscheinlich feststellen, dass die von crontab verwendete Shell sh ist . Sie können / etc / crontab noch einmal überprüfen .
quelle