こんばんわ
今日もいつもの長い前置き無しです。
crontab という仕組みがあります。Windowsで言うところの「タスクスケジューラ」である日、曜日、時間などになったら決まったプログラムを実行すると言うものなのですが、月、日、時間、分、曜日などの指定はあるのですが、第何日曜日とか、そう言う設定がありません。月の頭に実行したいのだけれども、平日に実行したくないので、第1日曜日に実行したたいということありませんか?
単純に日曜日に実行するの出れば、
0 22 * * 0 test-script.csh
のように記述すれば、日曜日の 22:00 に test.csh が実行されます。
ただこのままだと、毎週日曜日に実行してしまいます。まあ毎週日曜に実行でも問題なければいいのですが、先月までのログの集計を翌月の日曜日にやりたいとか、たまにそんなことがよくあるので(本当!?)、第1日曜日に実行する方法について考えます。
1.crontab の設定をする
仕方がないので、crontabには毎週日曜日に実行されるように設定します。先ほどの例と同じです。
0 22 * * 0 test-script.csh
2.起動されたスクリプト側で第1日曜日かどうかの判断をします
以下のように書きます。「echo 処理を行います」の後に行いたい処理を書きます。
# 以下サンプル
#!/bin/csh
set DAY=`date +%d`
set WOM = `echo "$DAY / 7" | bc -l`
set RESULT = `echo "$WOM > 1" | bc -l`
if ( $RESULT == 1 ) then
echo 第一週目ではありません
exit
endif
echo 処理を行います
# 以上サンプル
以下のような考え方です。
・起動された日を求めて、7で割ります。
・7よりも大きな値だったら、割り算を行なった結果が1よりも大きくなるので、
割り算の結果が1よりも大きかったら2週目以降になっていると判断します。
・計算や、小数点を含む数字の判断は bc というコマンドで行います。
ちゃんとテストしていないので、なんとなく7日 日曜日、8日 日曜日あたりで、
なんか間違いそうな気もしますが。。。大丈夫だと思います。
0 件のコメント:
コメントを投稿