cronで90分おきにコマンドを実行したい
crontabで○分おきにって00-59しか指定できないんですよね!*1
じゃあ90分おきに実行したい場合はどうしよう?と思って、crontabに
*/30 * * * * test $( expr $( date +%s ) % 5400 ) -eq 0 && hoge.zsh
と書いてみたけど動かない。。
しょうがないから、crontabは
*/30 * * * * hoge.zsh
として、90分の判定はhoge.zshで判定することにしました。
hoge.zsh
# 90分ごとにコマンドを実行 DATE=`date "+%Y.%m.%d %H:%M:%S"` DATE_SEC=`date +%s` # 現在のエポック秒(1970.1.1 0:00:00からの経過時間) DATE_MIN=`expr $DATE_SEC / 60` # エポック秒を分に変換 if [ `expr $DATE_MIN % 90` -eq 0 ]; then echo $DATE >> ~/scripts/hoge.log # ここに実行したいコマンド else echo "nonAction.$DATE... $DATE_MIN:$DATE_SEC" >> ~/scripts/hoge.log fi
こんな感じかなー。cronで30分に1回このスクリプトが実行されて、更にスクリプト内で90分かどうかをチェックします。
最初date +%sを5400秒(90分)で割っていたんだけど、実行時に1秒ほどずれてしまうことが度々あったので、分に変換しています。
*1:正確には、毎時00-59/○分