Wie werden Cron-Jobs auf GMT ausgeführt, nicht auf Ortszeit?


8

Wie kann ich Cron-Jobs auf GMT ausführen lassen, nicht auf Ortszeit?

Das ist meine Crontab-Datei:

#m  h           d   m   wday    command
TZ=GMT
5   0,6,12,18   *   *   *   ~/Documents/bash/transfer.sh

Meine Jobs scheinen zur Ortszeit (GMT + 11) ausgeführt zu werden. Ich verwende OS X Snow Leopard, verschiebe den Code jedoch nach Abschluss der Entwicklung auf Linux.

Die Linux-Umgebung ist möglicherweise eine gemeinsam genutzte Umgebung, in der ich möglicherweise weniger Kontrolle über die Konfiguration habe.



Antworten:


8

Nicht alle Versionen des cronSupports führen Jobs mit einer anderen Zeitzone als der des Systems aus.

Wenn dies bei Ihnen der Fall ist, ist es wahrscheinlich, dass die Spezifikation TZ=GMToder TZ=UTC(ohne die spitzen Klammern) sein sollte. In einigen Fällen wäre die Variable CRON_TZ.

Am besten überprüfen Sie die systemspezifische Dokumentation. Siehe man 5 crontab.


3

Wenn Ihre Ortszeit ist Europe/London. Dann:

crontab -e    # or 'cru' on some machines
>>>
# Run COMMAND at 03:15am UTC every morning
15 3 * * * [ "$(date +\%z)" = "+0000" ] && COMMAND
15 4 * * * [ "$(date +\%z)" = "+0100" ] && COMMAND
<<<

Ein anderes Beispiel:

Wenn Ihre reguläre Zeit eine +0500Verschiebung von UTCund Ihre saisonale Zeit eine +0600Verschiebung von ist UTC. Fügen Sie +5dann alle im obigen Beispiel angegebenen Stunden hinzu. Dies bedeutet, dass Sie zu 08:15ambzw. 09:15amvon Ihrer Ortszeit ausgeführt werden. Ihre modifizierten Cron-Linien würden dann so aussehen:

crontab -e    # or 'cru' on some machines
>>>
# Run COMMAND at 03:15am UTC every morning
15 8 * * * [ "$(date +\%z)" = "+0500" ] && COMMAND
15 9 * * * [ "$(date +\%z)" = "+0600" ] && COMMAND
<<<

[BEARBEITEN] Stellen Sie sicher, dass \keine Prozentzeichen %in Ihrer Crontab-Datei enthalten sind. Wie Crontab sie als Newline-Separator interpretiert. zB %-> \%.


1
Es wird Probleme geben, wenn Sie sich in einer Zeitzone befinden, in der die Sommerzeit verwendet wird. Daher ist Ihre Zeitzone manchmal +01: 00 und manchmal +02: 00
inemanja

2
Vielleicht könnten Sie näher darauf eingehen? Das glaube ich nicht. Wir berücksichtigen bereits die Sommerzeit. Jeder Fall hat eine eigene Cron-Linie. 1 für jede mit / ohne Sommerzeit.
Dreamcat4

Dies sollte die akzeptierte Antwort sein, da einzelne Befehle unterschiedliche Verhaltensweisen zulassen
Patrick McCann

0

Sie könnten vielleicht die ursprüngliche Crond-Binärdatei einwickeln.

mv /usr/sbin/crond /usr/sbin/crond.real
cat > /usr/sbin/crond
#!/bin/sh
TZ=GMT
export TZ
exec crond.real ${1+"$@"}

hallo hlovdal, kannst du bitte diese schritte erklären?
Facettenauge

Kopieren Sie crond nach crond.real, ersetzen Sie crond durch ein kurzes Skript, in dem Sie TZ festlegen und exportieren, und führen Sie dann crond.real aus?
Facettenauge

Nicht kopieren, sondern verschieben, aber ja, der Rest Ihrer Analyse ist korrekt.
Hlovdal
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.