« ワンライナーでOOなPerlモジュール使うときに、2回もモジュール名を打ち込んでいられるほど人生は長くない件について | メイン | Plack::Middlewareで$envの中身を見るテストを書く方法 »

2013年1月 5日

運用におけるcrontabのテストとParse::Crontab

Vixie cron形式のcrontabをparseするモジュールをリリースしました。 Vixie cronと言えば、けんじおじさんに「カビ臭い」とかdisられそうな代物ですが、なんだかんだで利用している人は多いでしょうし、僕も使っています。

https://metacpan.org/release/Parse-Crontab

最近携わるプロジェクトではcrontabはリポジトリ管理しているのですが、それをあまりちゃんとテストをしてなかったので、それを解消すべく書きました。

以下の様に、crontabのテストを書くことが可能です。

use strict;
use Test::More;
use Parse::Crontab;

my $crontab = Parse::Crontab->new(file => 'data/crontab.txt');

ok $crontab->is_valid or diag $crontab->error_messages;

for my $job ($crontab->jobs) {
    my $command = $job->command;
    # 実行ファイルがちゃんと存在するかのチェックとか
    ...
}
done_testing;

さくっと書く予定だったのですが、大分重厚長大な感じで、MouseOO厨感丸出しになっておりますが気にしないで頂きたい。 気に食わなかったらParse::Crontab::SimpleなりLiteなりを作っていただければと思います。もちろんPullreqもお待ちしております。

ちなみに、リポジトリ管理しているcrontabは以下の様な感じで本番サーバーに反映しております。

# 差分確認
% diff -u <(crontab -l) data/crontab.txt
# 反映
% crontab data/crontab.txt

このモジュールを書きながら調べていて、実はcrontabの指定形式は色々奥が深い(複雑な)事を知ったのですが、それは別のエントリーにでも書きます。

ところで、とあるプロジェクトで cat data/crontab.txt | wc -l したら90とか返ってきて、自分の目を疑ってエディタで開いて確認しなおしましたが間違いありませんでした。そりゃちゃんとテストしないといけませんな。

投稿者 Songmu : 2013年1月 5日 02:39