Wheneverを使ってRubyでcronを設定したときのメモを残しておきます。
春ごろにも仕事で使ったので、備忘録として残しておこうと思ったら忘れてしまって、今頃になってまたcronの設定を仕事でやったので、今度こそはと思い、メモっておきます。
Railsプロジェクトなのでそれを前提に記事を書いています。
Wheneverとは?
Wheneverは、とかく忘れがちなcronの設定をrubyの構文でわかりやすく記述することができます。
いい加減なプロジェクトだと、本番サーバに何となくcronを設定しただけになって、どこを見ればどういうバッチ処理が走っているのか把握しにくいというような場面によく遭遇しました。
Wheneverはただ単にわかりやすいというだけではなく、設定ファイルをバージョン管理システムに登録しておくことで後から読み返すことが容易になり、設定を忘れてしまった場合にも安心です。
設定ファイルを作成する
さっそく使ってみましょう。Gemfileに以下を追記し、bundle updateします。
gem 'whenever', :require => false
プロジェクトのディレクトリに移動して以下のコマンドを実行するとconfig/schedule.rbが生成されます。
config/schedule.rbをプロジェクトに合わせて書き換えてみましょう。
詳しくはGitHubにあるreadmeを見るとわかりますが、cronの時間設定をrubyの構文で書くことができます。
# 毎分、rails runnerが走ります。
every 1.minutes do
runner "Hoge.hoge_method()"
end
cron本来の書式や:day、:hourなどを指定することもできます。
Capistranoの特定のロールだけで実行できるタスクを指定するというようなこともできるようです。
実際に設定してみる
以下のコマンドを実行すると、設定内容が出力されます。crontabには書き込まれません。
不都合な点はないか確認すると良いでしょう。
# 設定する内容を出力。crontabには書き込まれません
whenever
# ヘルプでwheneverのオプションを確認する
whenever -h
# 開発環境にする場合は以下のように書く
whenever -s 'environment=development'
# crontabに書き込む場合
whenever -w
# crontabに書き込む(開発環境)
whenever -s 'environment=development' -w
とても楽ですね。
参考