基本的に、隔週の日曜日に実行したい一連のコマンドがあります。スクリプトを毎週日曜日に実行するように cron タスクを設定すると、このスクリプトは偶数週にのみスクリプトを実行できるため、隔週の日曜日にのみ実行されます。私の質問は、このスクリプトが年々機能するかどうかです。
if [ $(($(date +'%U') % 2)) -eq 0 ]
then
some command
fi
ここには XY 問題と呼ばれるものがあります。
シェル スクリプトのこの部分に問題があり、スクリプトを修正して問題を解決したいと考えています。実際には、問題の根本原因を修正する方が簡単です。
隔週の日曜日に実行するように cron ジョブを変更するだけです。
#----+-----+-----+-----+-----+-------------------------------------------------
#min |hour |day |month|day |command
# | |of mn| |of wk|
#----+-----+-----+-----+-----+-------------------------------------------------
03 04 * * 7 expr `date +%W` % 2 >/dev/null || fortnightly.sh
2 週間ごとにジョブを実行するように cron に指示する方法を参照してください。詳細については。
cron
これを構文で指定したくない場合は、%s
代わりに の形式を使用できます%U
。これにより、1970 年 1 月 1 日 UTC からの秒数が得られます。これを分割して週番号を取得できます。
$(($(date +'%s') / 604800))
次に、モジュロテストを実行できます。
604800 = 7 * 86400 = 7 * 24 * 60 * 60
数字、つまり1 週間の秒数に注意してください。
これを毎日実行している場合は、実際に日曜日であることを知りたいと思うでしょう。したがって、この場合、86400 で除算して日付を取得します。次に、ゼロ日が木曜日であるという知識を利用して、開始した日曜日に応じて、結果 (モジュロ 14) が 3 または 10 であることを確認できます。