アカハヤの技術ブログ

クズと天才は紙一重 twitter:@akahaya719

railsでcrontab実装

wheneverというgemを使うことで、

定期的にcronで実行したいバッチ処理等を簡単に作成できます。

 

Gemfileに以下を記述してbundle installを実行

gem 'whenever', require: false

 

その後、次のコマンドを実行

bundle exec wheneverize .

すると、config以下にschedule.rbが作成されます。

 

次の4つをスケジューリングできます。

command: bashコマンドの実行
rake: rakeタスクの実行
runner: Rails内のメソッド実行
script: scriptの実行

 

次にschedule.rbに設定を記述します。

# ログファイルの指定
set :output, "#{path}/log/cron.log"
#実行環境の指定(デフォルトはproduction)
set :environment, :production

every 1.day, at: '6:00 am' do
  runner 'MyModel.test'
end

毎日am6:00にMymodelのtestメソッドが実行されます。

 

他にも設定方法は色々あり、少し例をあげると

#1時間ごと
:hour
#3時間ごと
3.hours
#曜日指定
:sunday, at: '6am'
#毎月25~30日まで、0:00に実行
'0 0 25-30 * * '

こんな感じです。

 

wheneverでは、Rails.rootが使えないらしいので、

Rails内のディレクトリを参照する場合は#{path}をつけてください。

 

最後に、crontabの設定です。

#crontabの設定、更新 
RAILS_ENV=development bundle exec whenever --update-crontab
#crontabの設定削除 
RAILS_ENV=development bundle exec whenever --clear-crontab