Wheneverとは
wheneverはcrontab管理用ライブラリ。
要はRubyでcronの設定が書けるライブラリ。
インストール
gem 'whenever', :require => false
$ bundle install
基本的な使いかた
schedule.rb作成
$ cd padrino_project
$ wheneverize .
これで、padrino_project/config/
以下にschedule.rbが作成される。
設定
例えば、3時間毎にrakeタスクを動かしたいときは以下のように設定する。
# 3時間毎に
every 3.hours do
rake "my:rake:task"
end
job typeはrake
以外にもcommand
, runner
, script
が設定できる。
詳しくはREADMEに書いてある。
crontabに書き出す
$ whenever -w
確認
crontabに正しく書きだされているか確認する場合は
$ crontab -l
応用的な使い方
job typeの作成
デフォルトで設定されているjob typeはrake
, command
, runner
, script
だが、自分で新しいjob typeを作成できる。
padrino_rake
というjob typeを作成してみる。
export PATH=\"$HOME/.rbenv/bin:$PATH\"; eval \"$(rbenv init -)\";
の部分はrbenvを利用してる場合。
job_type :padrino_rake, "export PATH=\"$HOME/.rbenv/bin:$PATH\"; eval \"$(rbenv init -)\"; cd :path && :environment_variable=:environment bundle exec padrino rake :task --silent :output"
:path
, :environment_variable
, :environment
, :task
, :output
は変数。
変数に値をセット
上で出てきた変数に値をセットしてみる。
job_type :padrino_rake, "export PATH=\"$HOME/.rbenv/bin:$PATH\"; eval \"$(rbenv init -)\"; cd :path && :environment_variable=:environment bundle exec padrino rake :task --silent :output"
# setで変数に値をセットできる。
set :output, "/path/to/cron_log.log"
# 引数を追加することでも変数に値をセットできる。
# 第一引数は:taskにセットされる。
every 3.hours do
padrino_rake "myrake:task", :environment_variable => "RACK_ENV", :environment => "development"
end
:task
以外の変数への値のセットは省略可能で省略した場合はデフォルト値が設定される。
各変数のデフォルト値は
:path => wheneverが実行されたディレクトリ
:environment_variable => 'RAILS_ENV'
:environment => 'production'
環境ごとに設定を変える場合
設定ファイルを環境ごとに分ける。
job_type :padrino_rake, "export PATH=\"$HOME/.rbenv/bin:$PATH\"; eval \"$(rbenv init -)\"; cd :path && :environment_variable=:environment bundle exec padrino rake :task --silent :output"
set :output, "/path/to/cron_log.log"
set :environment_variable, "RACK_ENV"
set :environment, "development"
every 3.hours do
padrino_rake "myrake:task"
end
job_type :padrino_rake, "export PATH=\"$HOME/.rbenv/bin:$PATH\"; eval \"$(rbenv init -)\"; cd :path && :environment_variable=:environment bundle exec padrino rake :task --silent :output"
set :output, "/val/log/cron"
set :environment_variable, "RACK_ENV"
set :environment, "production"
every 3.hours do
padrino_rake "myrake:task"
end
crontabに書き出す
$ whenever -w -f config/schedule_development.rb