トップ «前の日記(2011-01-05) 最新 次の日記(2011-01-09)» 編集

2011-01-07 [長年日記]

_ crontabの書き換えミス防止にWheneverを使おうとして失敗

crontab -e で自分用 reminder

sleep 300 && growlnotify -s -m 'どん兵衛'

てなことも普段やっているんだけど、経過時間ではなく時刻指定で alert を上げてほしいこともよくある。タスクに名前の付くものは Remember the Milk を使っているんだけど、そこまででもない小さなものは cronteb -e して自分用の crontab にそのまま書いてしまうこともある。

crontab の設定ミスに気づかない

ところがこの crontab の設定を時々間違える。致命的な文法ミスなら crontab -e で開いたエディタを終了したときにチェックが走って怒られるんだけど、そういうレベルでは見つからないミスをする。

また、/etc/crontab のレベルなら何度も確認をするのでミスがあってもすぐに見つかる。しかし crontab -e のレベルではそこまで確認しないのでミスがあってもなんとなくスルーしてしまう。

そこでチェックツールか何かないかと思ったけど、見つからないので反対の方向に考えてみた。

Whenever を試してみたものの

crontab の記法だからミスしてしまうので、crontab 以外のもっと分かりやすい記法で書いて crontab に変換すればいい。そういやそんな発想の Whenever っていう Gem があった。

javan/whenever - GitHub

Whenever は crontab を書き換えることもできるのだけど、今回はシステムの crontab ではなくあくまで個人のものなので、

Whenever::Output::Cron.new

を直接呼んでみることにした。例えばこんな感じ。

irb> Whenever::Output::Cron.new( 'sun', 'echo', '10:00' ).output
=> "0 10 * * 0 echo"

なんかちょっと使いにくい。

もうちょっと簡単にできないかと思い、Whenevrer が時刻指定の parse に使っている Chronic を読んでみた。

mojombo/chronic - GitHub

けど、Chronic 自体はほんとに parse しかしてない。crontab 形式に format するのは Whenever の仕事。

で、Whenever の中で parser を探すと、どうも頑なに frequency を設定しようとしている。つまり、

単純な reminder にはオーバースペック

らしいということが分かった。

結局、未だに何一つ変わってない。うーん。本格的に欲しくなったら DateTime.parse ベースでシンプルなやつを自分で書いた方がいいかもしんない。