QuartzSchedulerには、CST / BST /またはすべてのタイムゾーンで実行すると言える機能があります。これは、特定のタイムゾーンで特定のタスクを実行し、別のタイムゾーンで特定のタスクを実行したい場合にも役立ちます。
タイムゾーンが変更されると、人々がクレイジーで時間を変更する必要があるcrontabのタスクのリストを通過する必要があるため、タイムゾーンを指定できるcrontabに似た機能はありますか?
I am looking for something where we can execute certain jobs in certain timezones and certain other jobs in some other timezones.
答え1
ディストリビューションによって異なります。 Cronの一部のバージョンはそれをサポートしていますが、他のバージョンはサポートしていません。たとえば、Debianの場合:
定義されたタイムゾーンで実行するようにcronデーモンを制限します。現在、ユーザー固有のタイムゾーンはサポートされていません。すべてのタスク:システムタスクとユーザータスクは、設定されたタイムゾーンに従って実行されます。ユーザーがcrontabで環境変数を指定しても、TZ
これはcrontabで実行されるコマンドにのみ影響し、crontabジョブ自体の実行には影響しません。
そしてFedoraでは:
CRON_TZ
cronテーブルに特定のタイムゾーンを割り当てます。ユーザーは、指定された時間帯に選択したテーブル時間を入力します。ログの時間は、デーモンが実行されているローカルタイムゾーンに基づいています。
man 5 crontab
したがって、システムのcrontabのマニュアルページ()を確認してください。 (上記の2つの段落は、システムのマニュアルページから取得されます。)
答え2
cron
指定されたユーザーごと(またはタスクごと)のタイムゾーンにタスクをスケジュールするように指示する普遍的な方法はないようです。
しかし、この問題を解決することは難しくありません。たとえば、毎日午前10時30分(PST)でジョブを実行するには、ラッパーを作成して1時間ごとに30分ごとに呼び出します。
30 * * * * wrapper ...
ラッパーは内部で独自のタイムゾーンを設定し、現在時刻が午前10時30分に近い場合にのみ指定されたコマンドを実行できます。入らないので、若干の偏差は許容しなければなりません。正確に毎時30分。
十分に役立つ場合は、これらのラッパーを自分で書くこともできます。私は次の構文を考えています。
cron-wrapper -tz [zone] -time [time] command args...
あるいは、より簡単には、時間をUTCとして指定し、タイムゾーン指定を省略することもできます(これにより、タイムゾーン指定構文を決定する必要はありません)。
たとえば、現在CDT(中央夏時間)を使用している場合でも、ジョブが常に24時間ごとに実行されるように指定されたCST(中央標準時)時間でジョブを実行する必要がありますか?それでは、年間半分は午前10時30分に、残りの半分は午前11時30分に実行されますか? (ほとんどの人は、毎日一貫した壁時計で作業を実行したいと思いますcron
。