CapistranoでWhenever

昨日の続き。
Whenever標準でCapistranoのタスクが用意されているので、簡単に組み合わせることができる。

deploy.rbの編集

以下の行を適当な場所に挿入。例えばロールを定義している下あたりとか。

set :whenever_command, "bundle exec whenever"
require "whenever/capistrano"

これだけでもうcap deployすればconfig/schedule.rbの内容がCrontabに反映されるようになる。

ロールの設定

Wheneverの対象となるデフォルトのロールは:dbになっている。
必要ならば:appに変更したり、適当に:batchなどのロールを作ってdeploy.rbに書く。

set :whenever_roles, { :batch }

複数サーバーで実行されると負荷などが面倒になりそうな処理を実行している場合などは特に注意。

その他

このあたりのソースを見るといろいろわかる。

タスク

以下のようなタスクが追加される。
これらはdeploy時のフックで自動的に実行されるので、通常は特に意識する必要はない。

が、運用にともなって一時的にCronによる実行を止めたいときや、止めたCronを再開したいときには直接実行もできる。

whenever:update_crontab

schedule.rbの内容をCrontabに反映する。

whenever:clear_crontab

Wheneverが登録したCrontabの内容をクリアする。

ただこれでクリアしてもcap deployするとまた登録されてしまうので、長期間にわたって止める場合はschedule.rbの内容を修正してデプロイしなおすのが吉。