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 があった。
Whenever は crontab を書き換えることもできるのだけど、今回はシステムの crontab ではなくあくまで個人のものなので、
Whenever::Output::Cron.new
を直接呼んでみることにした。例えばこんな感じ。
irb> Whenever::Output::Cron.new( 'sun', 'echo', '10:00' ).output
=> "0 10 * * 0 echo"
なんかちょっと使いにくい。
もうちょっと簡単にできないかと思い、Whenevrer が時刻指定の parse に使っている Chronic を読んでみた。
けど、Chronic 自体はほんとに parse しかしてない。crontab 形式に format するのは Whenever の仕事。
で、Whenever の中で parser を探すと、どうも頑なに frequency を設定しようとしている。つまり、
単純な reminder にはオーバースペック
らしいということが分かった。
結局、未だに何一つ変わってない。うーん。本格的に欲しくなったら DateTime.parse ベースでシンプルなやつを自分で書いた方がいいかもしんない。