複数のタイムゾーンを処理するcronの代替


8

任意の数のタイムゾーン(具体的には、ユーザー/ファイルごとに複数)でジョブのスケジュールを設定できるcronの代替(または可能な場合はcronのメソッド)を探しています。私が望むのは、ジョブ(またはcron行)ごとにタイムゾーンを指定し、ローカルタイムゾーンの時間のみを指定する機能です。cronが実行されるタイムゾーン全体を変更できることに気付きましたが、1日の終わりには、1つのタイムゾーンでしか実行できません。

私の現在の解決策は、すべての時間をGMTに変換し、それに応じてジョブを実行することです。唯一の問題は、夏時間の切り替え週間です。それぞれのローカルタイムゾーンで正しく動作するように、多くの手動編集を行う必要があります(たとえば、地域は夏時間に従わないか、同じ日に変更されません)。

これについて何か考えはありますか?

回答:


3

あなたはそれを両方の方法で実現しようとしていると思いますが、現実にはそれができないのです。たとえば、現地時間の午前8時にジョブを実行する場合は、夏時間がアクティブかどうかに関係なく、システム(およびcron)を現地時間で実行し、季節的な編集を行わないか、UTCで実行します( GMTではありません)、季節ごとの編集を行います。に関係なく、ジョブを同じUTCで実行する場合は、UTC に従ってcronを実行します。これ以上行うことはありません。

ユーザーが自分のローカルタイムゾーンに従ってcronジョブをスケジュールできるようにし、ユーザーが便宜上変換について考える必要がないようにする場合は、cron仕様とタイムゾーンを受け入れる変換スクリプトを記述します。舞台裏でUTCに変換し、彼のためにcrontabを編集します。既存のエントリへの変更を処理するための双方向の変換である可能性もあります。

あなたが実際に達成しようとしいることを私たちに教えてくれると助かります


6

fcronはこの機能をサポートしています。

fcrontab(5)の「timezone」オプションのドキュメントから:

指定されたタイムゾーンでジョブを実行します。timezone-nameは、環境変数TZに有効な文字列です。詳細については、システムのドキュメントを参照してください。たとえば、「Europe / Paris」はLinuxシステムで有効です。このオプションは、夏時間の変更を正しく処理します。TZ環境変数は、このオプションを定義するジョブが実行されると、タイムゾーンの値に設定されます。


fcronはかなり古く、にはデフォルトのインストールがありませんubuntu。他の解決策はありますか?
silgon 2018

「壊れて時代遅れ」になったため、2011年にfcronがDebianから削除されたようです:(
Peter Green

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)

0

協定世界時(UTC)を使用することをお勧めします。夏時間の影響は受けません。「タイムラインで途切れることなく、冬時間と夏時間の切り替え」への回答を参照してください。これは通常、システム時間にも最適です。


質問を十分に明確にしていないと思います...私の問題は、ある地域(たとえば、南アフリカ/ヨハネスブルグ)で現地時間の午前8時に実行するジョブが必要なことです。夏時間が発生すると、UTCオフセットは最終的に新しい現地時間を考慮して変更され、それを考慮して手動で編集する必要があります。それは理にかなっていますか、それともここで何か不足していますか?
mgray 2009年

デニスの発言をご覧ください。彼は正しいです:-)
カイル・ブラント


-1

Cfengineはこれを行う方法です。現地時間(夏時間に適応)または同時ジョブのGMTを使用してジョブを設定できます。例外を除いて、あらゆる種類のカスタムカレンダーを作成できます。ソフトウェアのスケジューリングに多額のお金を払うことができることは知っていますが、世界中の3か所にデータセンターがあるとしても、これ以上のものは必要ありませんでした。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.