Lösung 1:
fcron unterstützt diese Funktion.
Aus der Dokumentation der Option "timezone" in fcrontab(5):
Führen Sie den Job in der angegebenen Zeitzone aus. Zeitzonenname ist eine Zeichenfolge, die für die Umgebungsvariable TZ gültig ist:Weitere Einzelheiten finden Sie in der Dokumentation Ihres Systems. Beispielsweise ist "Europa/Paris" auf einem Linuxsystem gültig. Diese Option behandelt Sommerzeitänderungen korrekt. Die TZenvironment-Variable wird auf den Wert der Zeitzone gesetzt, wenn ein Job ausgeführt wird, der diese Option definiert.
Lösung 2:
Ich denke, Sie versuchen, beides zu haben, und die Realität ist, dass Sie es einfach nicht können. Wenn Sie möchten, dass ein Job beispielsweise um 8 Uhr Ortszeit ausgeführt wird, unabhängig davon, ob die Sommerzeit aktiv ist, führen Sie entweder Ihr System (und Cron) in Ortszeit aus und nehmen keine saisonalen Änderungen vor, oder Sie führen ihn in UTC ( nicht GMT) und saisonale Änderungen vornehmen. Wenn Sie möchten, dass Ihre Jobs zur selben UTC ausgeführt werden, egal , dann führst du cron gemäß UTC aus und es gibt nichts weiter zu tun.
Wenn Sie möchten, dass ein Benutzer in der Lage ist, einen Cron-Job gemäß seiner lokalen Zeitzone zu planen, und er sich zu seiner Bequemlichkeit nicht um Konvertierungen kümmern muss Dann schreiben Sie ein Konvertierungsskript, das eine Cron-Spezifikation und eine Zeitzone akzeptiert, dann die Konvertierung in UTC hinter den Kulissen durchführt und die Crontab für ihn bearbeitet. Es könnte sogar eine bidirektionale Konvertierung sein, um Änderungen an bestehenden Einträgen zu verarbeiten.
Es ist hilfreich, wenn Sie uns mitteilen, was Sie tatsächlich erreichen möchten .
Lösung 3:
Sie könnten sich selbst einen kleinen Wrapper schreiben, der drei Argumente benötigt:
- Stunde der Zielzeitzone zum Abgleichen
- Zielzeitzone
- Befehl zum Ausführen, wenn die Ziel-tz-Stunde mit der aktuellen Stunde (in Ziel-tz) übereinstimmt.
Fügen Sie dann einfach diese Wrapper-Zeile in Ihre Crontab ein, damit sie stündlich ausgeführt wird:
python tz_wrapper.py 14 "US/Mountain" "echo 'hi'"
Einfache Python-Version:
#!/usr/bin/python
import sys, os, datetime
import pytz
arg_hour = sys.argv[1]
arg_timezone = sys.argv[2]
arg_cmd = sys.argv[3]
target_tz = pytz.timezone(arg_timezone)
target_hour = pytz.utc.localize(datetime.datetime.utcnow()).astimezone(target_tz).strftime("%H")
if target_hour == str(arg_hour):
os.system(arg_cmd)