web-dev-qa-db-ja.com

CronタブでTimeZoneを使用する方法

特定の日付[現地時間ではなくクライアント時間]にジョブを実行して、クライアントにメールを送信します。私はcpanel cronジョブを使用していますが、タイムゾーンでcronジョブを使用しようとしました

それでも私のローカルタイムゾーンで送信しています

32 16 08 05 *  /usr/bin/curl CRON_TZ=Africa/Algiers https://www.example.com/SendCron.php?CronID=382 #CronID382END # z93v66 

私はCron_TZを使用して何が間違っていましたか?

6
Salem Ahmed

CRON_TZ=オプション属性として、/usr/bin/curlcrontab ファイルの間違った場所にあります。

代わりに、cronエントリの前に、環境変数として設定する必要があります:

CRON_TZ=Africa/Algiers 

32 16 08 05 *  /usr/bin/curl https://www.example.com/SendCron.php?CronID=382

同じ単一行の単一のcronエントリにタイムゾーンを設定する必要がある場合、CRON_TZ環境変数では不可能ですが、外部 env を呼び出す必要があります(変更された環境でプログラムを実行)TZを変更するには:

32 16 08 05 * /usr/bin/env TZ=Africa/Algiers /usr/bin/curl https://www.example.com/Send...

どちらもタイムゾーンを変更することに注意してくださいcronデーモンではなく、コマンドの場合。 cronデーモンは、CRON_TZ変数に関係なく、フィールドが現在の時刻と一致するかどうかを確認するだけです。 systemd-cron crontab のマニュアルページで、この制限について説明しています。

Systemd-cronユニットは、定義されたタイムゾーンで実行されます。現在、ユーザーごとのタイムゾーンはサポートされていません。すべてのタスク:システムおよびユーザーのタスクは、構成されたタイムゾーンに基づいて実行されます。ユーザーがcrontabでTZ環境変数を指定した場合でも、これはcrontabタスク自体の実行ではなく、crontabで実行されるコマンドにのみ影響します。

タイムゾーンに基づいてスケジュールを実行する必要がある場合は、サーバーのタイムゾーンを変更する必要があります。例:

ln -sf /usr/share/zoneinfo/Africa/Algiers /etc/localtime
12
Esa Jokinen