このような設定ができるようになりたいです。
- 2009 年 6 月 29 日から 2009 年 12 月 30 日まで、毎日午前 7 時にジョブ「X」を実行したいと考えています。現在の日付を 2009 年 4 月 4 日とします。
それはトリッキーな方法で行うことができます。
cron
その範囲には、すべて同じコードを実行する 3 つの個別のジョブが必要です (X
この場合)。
"0 7 29,30 6 * X"
) です。"0 7 * 7-11 * X"
)。"0 7 1-30 12 * X"
) を除くすべての日に 1 つ。これにより、以下が得られます。
# Min Hr DayOfMonth Month DayOfWeek Command
# --- -- ---------- ----- --------- -------
0 7 29,30 6 * X
0 7 * 7-11 * X
0 7 1-30 12 * X
次に、2010 年 6 月 29 日が来る前にそれらをコメントアウトしてください。12 月 31 日に最終cron
ジョブを追加して、無効にする必要があることをメールで知らせることができます。
X
または、年が 2009 でない場合は、すぐに終了するように変更できます。
if [[ "$(date +%Y)" != "2009" ]] ; then
exit
fi
そうすれば、ジョブを無効にするのを忘れても問題ありません。
はい、ほとんどです。cron の実装には、何年もサポートしているものとそうでないものがあります。また、このジョブは cron デーモンによってのみ実行されると仮定しているため、実行ビットを使用して cron がジョブを実行するかどうかを判断できます。
スクリプトを実行したいときまで、スクリプトを実行不可のままにしておく必要があることに注意してください。
次のcron式は、あなたが望むことを行います(週末を含む毎日)。必要に応じて微調整します。
# Make the job executable on 29 June.
0 6 29 6 * chmod +x /path/to/my/job/script
# Run the job between June and December, only if it's executable.
0 7 * 6-12 * test -x /path/to/my/job/script && /path/to/my/job/script
# Disable execution after 30 December.
0 8 30 12 * chmod -x /path/to/my/job/script
私は通常、実行中のプログラムでロジックを維持するのが好きです。スクリプトを毎日実行する 1 つの cron ジョブを設定することを検討してから、スクリプトが何か有用なことを実行するかどうかを独自に決定するようにすることもできます。最後の有効日 (12 月 30 日) が過ぎると、スクリプトは crontab から削除される可能性があります。スクリプトでは、実行していることとその理由を説明するために必要なすべてのコメントを含むロジックを設定できます。
ジョブがバイナリ プログラムの場合、プログラムを呼び出す前に、このスケジュール フィルタリング作業を実行する run_script を設定できます。
これを使用して、特定の間隔で実行される crontab を生成できます。
http://www.robertplank.com/cron/
またはこれ
http://www.webmaster-toolkit.com/cron-generator.shtml
1 つの解決策は、各月に 1 つずつ、6 つの cron をセットアップし、それぞれがその月の毎日午前 7 時に実行されるようにすることです。
それはおそらく最も簡単な方法です。次はスクリプトを作成することです。
いいえ、それはできません。
cron フィールドには、それぞれ分、時間、日、月、曜日の値が保持されます。
10 5 10 * * means run at 5:10 on every 10th of every month.
10 5 * 12 * means run at 5:10 on every day in december
10 5 * * 1 means run at 5:10 every Monday
crontab 形式は範囲を受け入れるため、一連の特定の月で実行することができます。4 月から 12 月までは、この場合の月フィールドは 4-12 になります。しかし、これは2009年に限定したいというあなたの希望を考慮していません.
cronjob の開始日と終了日を設定するメカニズムはありません。もちろん、これはいつでもスクリプト化できます。cronjob を毎日実行し、現在の日付が 30/12 より前であることを確認します。31/12 の場合は、それ自体を削除します。または、もっと考え抜かれたもの。
のcrontab
0 7 * * 6-12 command_X
部分的にやりたいことはできますが、6 月 1 日から 12 月 31 日まで実行されます。6 月前半と 12 月 31 日をスキップするには、X コマンドでスクリプトを作成する必要があります。