0

基本的に、隔週の日曜日に実行したい一連のコマンドがあります。スクリプトを毎週日曜日に実行するように cron タスクを設定すると、このスクリプトは偶数週にのみスクリプトを実行できるため、隔週の日曜日にのみ実行されます。私の質問は、このスクリプトが年々機能するかどうかです。

if [ $(($(date +'%U') % 2)) -eq 0 ]
then
  some command
fi
4

2 に答える 2

2

ここには 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 に指示する方法を参照してください。詳細については。

于 2013-05-02T02:46:46.257 に答える
1

cronこれを構文で指定したくない場合は、%s代わりに の形式を使用できます%U。これにより、1970 年 1 月 1 日 UTC からの秒数が得られます。これを分割して週番号を取得できます。

$(($(date +'%s') / 604800))

次に、モジュロテストを実行できます。

604800 = 7 * 86400 = 7 * 24 * 60 * 60 数字、つまり1 週間の秒数に注意してください。

これを毎日実行している場合は、実際に日曜日であることを知りたいと思うでしょう。したがって、この場合、86400 で除算して日付を取得します。次に、ゼロ日が木曜日であるという知識を利用して、開始した日曜日に応じて、結果 (モジュロ 14) が 3 または 10 であることを確認できます。

于 2013-05-02T02:54:21.117 に答える