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.