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 ベースでシンプルなやつを自分で書いた方がいいかもしんない。

About

例によって個人のなんちゃらです

Recent Posts

Categories

Tool 日々 Web Biz Net Apple MS ことば News Unix howto Food PHP Movie Edu Community Book Security Text TV Perl Ruby Music Pdoc 生き方 RDoc ViewCVS CVS Rsync Disk Mail FreeBSD Cygwin PDF Photo Zebedee Debian OSX Comic Cron Sysadmin Font Analog iCal Sunbird DNS Linux Wiki Emacs Thunderbird Sitecopy Terminal Drawing tDiary AppleScript Life Money Omni PukiWiki Xen XREA Zsh Screen CASL Firefox Fink zsh haXe Ecmascript PATH_INFO SQLite PEAR Lighttpd FastCGI Subversion au prototype.js jsUnit Apache Trac Template Java Rhino Mochikit Feed Bloglines CSS del.icio.us SBS qwikWeb gettext Ajax JSDoc Rails HTML CHM EPWING NDTP EB IE CLI ck ThinkPad Toy WSH RFC readline rlwrap ImageMagick epeg Frenzy sysprep Ubuntu MeCab DTP ERD DBMS eclipse Eclipse Awk RD Diigo XAMPP RubyGems PHPDoc iCab DOM YAML Camino Geekmonkey w3m Scheme Gauche Lisp JSAN Google VMware DSL SLAX Safari Markdown Textile IRC Jabber Fastladder MacPorts LLSpirit CPAN Mozilla Twitter OpenFL Rswatch ITS NTP GUI Pragger Yapra XML Mobile Git Study JSON VirtualBox Samba Pear Growl Mercurial Rack Capistrano Rake Win RSS Mechanize Sitemaps Android JavaScript Python RTM OOo iPod Yahoo Unicode Github iTunes God SBM friendfeed Friendfeed HokuUn Sinatra TDD Test Project Evernote iPad Geohash Location Map Search Simplenote Image WebKit RSpec Phone CSV WiMAX USB Chrome RubyKaigi RubyKaigi2011 Space CoffeeScript Nokogiri Hpricot Rubygems jQuery Node GTD CI UX Design VCS Kanazawa.rb Kindle Amazon Agile Vagrant Chef Windows Composer Dotenv PaaS Itamae SaaS Docker Swagger Grape WebAPI Microservices OmniAuth HTTP 分析基盤 CDN Terraform IaaS HCL Webpack Vue.js BigQuery Middleman CMS AWS PNG Laravel Selenium OAuth OpenAPI GitHub UML GCP TypeScript SQL Hanami Document SVG AsciiDoc Pandoc DocBook Develop Jekyll macOS Node.js Vite Heroku Transformer AI Data Cloud Wasm