Der Befehl cron, der in einer anderen Zeitzone und einem anderen Datum ausgeführt wird, zeigt eine andere Zeitzone an

8

Ich habe CentOS und wenn ich einen dateBefehl in der Shell ausführe, wird mir Folgendes zurückgegeben:

Do 28. April 14:08:20 GMT 2011

Cron-Jobs werden jedoch zur PST-Zeit ausgeführt. Bedeutet, wenn ich dies spezifiziere

15 7 * * * Befehl

Es wird mit 7 PST und nicht mit 7 GMT ausgeführt. Bitte sagen Sie mir, warum dies geschieht.

Vielen Dank

Ausgaben des Befehls hwclock:

/usr/sbin/hwclock --utcKein Zugriff auf die Hardware Clock über eine bekannte Methode möglich.
Verwenden Sie die Option --debug, um die Details unserer Suche nach einer Zugriffsmethode anzuzeigen.

Und als ich mit debug lief:
/usr/sbin/hwclock --debughwclock von util-linux-2.13-pre7 hwclock: Öffnen von / dev / rtc fehlgeschlagen, errno = 2: Keine solche Datei oder kein solches Verzeichnis. Keine verwendbare Uhrschnittstelle gefunden. Kein Zugriff auf die Hardware Clock über eine bekannte Methode möglich

shashuec
quelle

Antworten:

7

Höchstwahrscheinlich nicht Ihr Problem, aber erwähnenswert - Wenn sich Ihre / etc / localtime nach dem Laden von crond ändert, bleibt sie weiterhin in der vorherigen Zeitzone hängen. Starten Sie crond einfach neu / laden Sie es neu, und diese Änderung wird übernommen.

Ein weiteres "Gotcha" ist, dass Cron an der TZ-Umgebungsvariablen festhält. Dies kann in einer Crontab inline gesetzt werden, was sich auf alle darauf folgenden Linien auswirkt, aber es scheint wahrscheinlicher, dass TZ in der Umgebung gesetzt wird, in der crond geladen wird.

Ich habe nur ein paar Variationen (Optimieren der hr / min-Felder) im Folgenden versucht, um festzustellen, ob / wann diese beiden Jobs ausgeführt werden würden. Die Ausgabe, die in /tmp/tzout.localtime gestopft wird, sollte Ihnen auch einige Hinweise geben, ob $ TZ in der Umgebung, in der crond geladen wird, irgendwie gesetzt wird oder nicht.

* * * * *     echo $TZ `date` >> /tmp/tzout.localtime
TZ=GMT
* * * * *     echo $TZ `date` >> /tmp/tzout.gmt

Ich behaupte zwar nicht genau zu wissen, wo Ihr Problem liegt, aber hoffentlich wirft dies ein wenig Licht auf die Lösung!

Walkeran
quelle
Es ist eine gute Idee, im Gegensatz zu cron auch zu überprüfen, ob für den Benutzer eine TZ-Variable festgelegt ist. Ich würde auch empfehlen, den setBefehl als Cron-Test auszuführen. Es könnte zeigen, dass etwas Interessantes in einer anderen Variablen festgelegt ist.
Chutz
5

Die Frage ist etwas alt, aber das Ändern der Zeitzone und das Erkennen der Änderung durch crond ist unter CentOS immer noch ein Problem: Ich habe festgestellt, dass das Syslog-Deamon nach dem Ändern der Zeitzone auch mit neu gestartet werden muss

/etc/init.d/rsyslog

Siehe Timzone falsch nur für Protokolldateien?

MarcFasel
quelle
0

Ich glaube, dass "cron" basierend auf der Hardware-Uhr läuft, nicht auf der Uhr der konfigurierten Zeitzone. Versuchen Sie, "hwclock" anstelle von "date" zu betrachten, da "date" an die konfigurierte Zeitzone Ihrer Benutzer angepasst wird.

TheCompWiz
quelle
Beim Ausführen von hwclock sind nur wenige Fehler aufgetreten: / usr / sbin / hwclock --utc Auf die Hardware Clock kann nicht über eine bekannte Methode zugegriffen werden. Verwenden Sie die Option --debug, um die Details unserer Suche nach einer Zugriffsmethode anzuzeigen. und als ich mit debug lief: / usr / sbin / hwclock --debug hwclock von util-linux-2.13-pre7 hwclock: Öffnen von / dev / rtc fehlgeschlagen, errno = 2: Keine solche Datei oder kein solches Verzeichnis. Keine verwendbare Uhrschnittstelle gefunden.
Kein
Es ist sehr seltsam, dass Sie Fehler mit hwclock sehen würden ... aber gibt es eine Chance, dass Sie für die Zeit auf BIOS-Ebene suchen können? ist es auf die richtige Zeit für PST eingestellt?
TheCompWiz
1
-1, da alle mir bekannten CentOS-Cron-Implementierungen (vixie-cron unter CentOS 5 und cronie unter CentOS 6) auf der Systemuhr basieren, sodass diese Aussage einfach nicht wahr ist.
Chutz
0

Es gibt zwei Möglichkeiten, die Zeitzone zu ändern (mindestens unter CentOS 5, 6, 7 sowie die entsprechenden RHEL 5-, 6- und 7-Distributionen, Amazon Linux und Amazon Linux 2, die jeweils auf CentOS 6 und 7 basieren). abhängig vom Umfang dessen, was Sie beeinflussen möchten.

Zuerst müssen Sie ausführen tzselect(Kontinent, Land und Zeitzone auswählen), um den richtigen Wert für Ihre TZUmgebungsvariable zu erhalten. Dann:

1. Befolgen Sie die Anweisungen, um die Zeitzone für Programme zu ändern, die Sie über die Befehlszeile ausführen, sowie für alle Ihre interaktiven Shell-Prozesse (hier ist meine, die beispielsweise den TZWert für US Eastern Time anzeigt):

You can make this change permanent for yourself by appending the line
        TZ='America/New_York'; export TZ
to the file '.profile' in your home directory; then log out and log in again.

Here is that TZ value again, this time on standard output so that you
can use the /usr/bin/tzselect command in shell scripts:
America/New_York

2. Um jedoch die Zeitzone "System" zu ändern, die von Syslog, Crond, MySQL, Apache und anderen Daemon-Prozessen verwendet wird, die beim Start vom Init-System erzeugt werden, müssen Sie root werden und diese beiden Dateien ändern:

/etc/sysconfig/clock
/etc/localtime

Wenn ich zum Beispiel einen in Texas oder Kalifornien gehosteten Server verwende, habe ich festgestellt, dass diese auf die Zeit im zentralen oder pazifischen Raum verweisen, was für mich unpraktisch ist, und alle unsere Benutzer, Entwickler und Systemadministratoren sind ebenfalls an der Ostküste, um dies zu ändern Systemzeit mache ich diese Schritte:

# step 1
sudo vim /etc/sysconfig/clock

# change ZONE from UTC (or whatever it is) to your local TZ value:
ZONE="America/New York"

# (but leave this 2nd line alone!)
UTC=True


# step 2: copy your TZ value's dir/file (under zoneinfo) onto /etc/localtime
sudo cp -v /usr/share/zoneinfo/America/New_York /etc/localtime

# step 3
reboot

# Or if all you care about is crond, for instance, just
sudo systemctl restart crond.service # for CentOS 7 / Amazon Linux 2

# Or mysql on older init.d style RHEL 6 / CentOS 6 / Amazon Linux systems:
sudo /etc/init.d/mysqld restart
Gigawatt
quelle