私はこのタスクを実行する方法について多くの研究を行ってきました。
今私は実行するスクリプトを作成する方に傾いています。すべて週に実行して実行すると、「フラグ」ファイルにアクセスします。実行され、ファイルがすでに存在する場合は、ファイルを削除します(隔週操作を実行しません)。
私の質問は、隔週ごとにbashジョブスクリプトを自動的に実行するという目標を達成するためのよりエレガントでシンプルな他の方法はありますか?
ありがとうございます!
答え1
0 0 * * Thu bash -c '(($(date +\%s) / 86400 \% 14))' && your-script
私は怠惰なので、bashを使って数学を行います。私は1970年1月1日が木曜日であることを利用しました。他の曜日にはオフセットを適用する必要があります。 Cronにはエスケープパーセント記号が必要です。
クイックチェック:
function check {
when=$(date --date="$1 $(($RANDOM % 24)):$(($RANDOM % 60))" --utc)
echo -n "$when: "
(($(date +%s --date="$when") / 86400 % 14)) && echo run || echo skip
}
for start in "2010-12-02" "2011-12-01"; do
for x in $(seq 0 12); do
check "$start + $(($x * 7)) days"
done
echo
done
木曜日にいつでも実行すると、方法が機能することを示すためにランダムな時間を選択し、年の境界にまたがる日付を選択し、木曜日が4番と5番の月を含めました。
出力:
Thu Dec 2 06:19:00 UTC 2010: run
Thu Dec 9 23:04:00 UTC 2010: skip
Thu Dec 16 05:37:00 UTC 2010: run
Thu Dec 23 12:49:00 UTC 2010: skip
Thu Dec 30 03:59:00 UTC 2010: run
Thu Jan 6 11:29:00 UTC 2011: skip
Thu Jan 13 13:23:00 UTC 2011: run
Thu Jan 20 20:33:00 UTC 2011: skip
Thu Jan 27 16:48:00 UTC 2011: run
Thu Feb 3 17:43:00 UTC 2011: skip
Thu Feb 10 05:49:00 UTC 2011: run
Thu Feb 17 08:46:00 UTC 2011: skip
Thu Feb 24 06:50:00 UTC 2011: run
Thu Dec 1 21:40:00 UTC 2011: run
Thu Dec 8 23:24:00 UTC 2011: skip
Thu Dec 15 22:27:00 UTC 2011: run
Thu Dec 22 02:47:00 UTC 2011: skip
Thu Dec 29 12:44:00 UTC 2011: run
Thu Jan 5 17:59:00 UTC 2012: skip
Thu Jan 12 18:31:00 UTC 2012: run
Thu Jan 19 04:51:00 UTC 2012: skip
Thu Jan 26 08:02:00 UTC 2012: run
Thu Feb 2 17:37:00 UTC 2012: skip
Thu Feb 9 14:08:00 UTC 2012: run
Thu Feb 16 18:50:00 UTC 2012: skip
Thu Feb 23 15:52:00 UTC 2012: run
答え2
at
Linuxを実行している場合は、このユーティリティを使用する方法が1つあります。スクリプトの末尾に次のものを入れることができます。
at X + 2 weeks -f myscript
どこXスクリプトを実行する時間です。初期化するには、at
最初に実行したい時間を呼び出すと、上記のステートメントはスケジュール呼び出しを更新し続けます。
答え3
使えるならanacron
システムでは、状況ははるかに簡単です。使用するにはanacron
インストールする必要があり、root アクセス権が必要です。以前のシステム(RHEL 5.xなど)では機能しません。以前のバージョンのancronは起動時にのみ実行されます。最新のシステム(RHEL 6.xなど)で動作します。
これにより、anacron
X ジョブを週に 1 回実行するなど、より柔軟な方法でジョブをスケジュールできます。コンピュータが利用可能になってもジョブが実行されますanacron
。つまり、システムがいつ起動または終了するかを考える必要はありません。
隔週でスクリプトを実行するには、/etc/anacrontabに次のような行を追加する必要があります。
14 5 myScript script.sh
詳しくはマニュアルページをご覧ください。
答え4
隔週を定義するよりエレガントな方法があるかどうかはわかりませんが、これはあなたに役立ちます。
00 06 1-7,15-21 * * test `date +\%a` = Thu && /path/to/script
毎月第一、第三木曜日の午前6時にスクリプトが始まります。