2017年6月25日日曜日

cron で第1日曜日に実行する

こんばんわ

今日もいつもの長い前置き無しです。
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日 日曜日あたりで、

なんか間違いそうな気もしますが。。。大丈夫だと思います。




にほんブログ村 PC家電ブログ Macへ


0 件のコメント:

結局 Kindle にケースを買いました。

 こんばんわ 私、最近ほとんど外出しなくなったのですが、妻の買い物に一緒に行って、ぼけーっと待っていたり、病院に行ってぼけーっと待っていたりする機会が多くなり、なんなら家でもボケーっとしていることが非常に多くなったためか、Kindleの出番が結構ありそうです。 前回、タブレットで...