解決策 1:
fcron はこの機能をサポートしています。
fcrontab(5) の「timezone」オプションのドキュメントから:
<ブロック引用>指定されたタイム ゾーンでジョブを実行します。timezone-name は、環境変数 TZ に有効な文字列です。詳細については、システムのドキュメントを参照してください。たとえば、"Europe/Paris" は Linux システムで有効です。このオプションは、夏時間の変更を正しく処理します。このオプションを定義するジョブが実行されると、TZ 環境変数はタイムゾーンの値に設定されます。
解決策 2:
あなたは両方の方法でそれを実現しようとしていると思いますが、現実にはそれができません.たとえば、現地時間の午前 8 時にジョブを実行する場合は、夏時間がアクティブかどうかに関係なく、システム (および cron) を現地時間で実行し、季節的な編集を行わないか、UTC ( GMT ではありません)、季節ごとの編集を行います。ジョブを同じ UTC で実行したい場合は、関係なく なら、UTC に従って cron を実行すれば、それ以上何もする必要はありません。
ユーザーが自分のローカル タイム ゾーンに従って cron ジョブをスケジュールできるようにして、変換について考える必要がないようにしたい場合は、便宜上 次に、cron 仕様とタイムゾーンを受け入れる変換スクリプトを作成し、舞台裏で UTC への変換を行い、彼のために crontab を編集します。既存のエントリへの変更を処理するために、双方向の変換を行うこともできます。
実際に達成しようとしていることを教えていただけると助かります。 .
解決策 3:
3 つの引数を取る小さなラッパーを自分で書くことができます:
- 一致する目標タイムゾーンの時間
- ターゲット タイムゾーン
- ターゲット tz 時間が現在の時間 (ターゲット tz) と一致する場合に実行するコマンド。
次に、そのラッパー行を crontab に追加して、1 時間ごとに実行します:
python tz_wrapper.py 14 "US/Mountain" "echo 'hi'"
シンプルな python バージョン:
#!/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)