第一日曜日に実行したい月次処理
第一●曜日に月次処理をさせたい、というのはよく見かけるのですが、crontab
では表現できないですし、シェルスクリプトだけで書こうとするとかなり難儀します。そこで、perl のワンライナーで凌ぐことにしました。
第一日曜日の場合に何かをしたい場合は、こんな感じに書きます。
/usr/bin/perl -e '@_=localtime(time); exit(!($_[6]==0 && $_[3]<=7))' \
&& echo "do something"
第一日曜日の場合は、終了コード 0 が返るので、続行する処理が実行されるという仕組みです。$_[6]には曜日(0. 日曜, 1. 月曜, ... , 6.土曜)が入っていますので、お好きな曜日に変えて使いましょう。
ちょっとした応用ですが、日時処理と月次処理をまとめておきたい場合は、こんな感じに書くと良いでしょう。
#!/bin/bash
# 日時処理
# ...
# 月次処理日でない場合はここで抜ける
/usr/bin/perl -e '@_=localtime(time); exit(!($_[6]==0 && $_[3]<=7))' || exit 0;
# 月次処理
# ...
論理積と論理和は、とても便利ですね。