rakeタスクをcron実行する

cron: 定期的に何かのプログラムを実行するためのLinuxの機能。

既存のrakeタスクをcronで一定間隔で実行するため、gem 'whenever'を用いる。

whenever

インストール

gem 'whenever', require: false
$ bundle install
$ bundle exec wheneverize .  # config/schedule.rbを作成

schedule.rbの編集

# config/schedule.rb

# Rails.rootを使用するために必要
require File.expand_path(File.dirname(__FILE__) + '/environment')

# cronを実行する環境変数
rails_env = ENV['RAILS_ENV'] || :development

# cronを実行する環境変数をセット
set :environment, rails_env

# cronのログの吐き出し場所
set :output, "#{Rails.root}/log/cron.log"

# タスクとその実行感覚を指定
every :year do
  rake 'sixth_grade:graduate'
  rake 'lteq_fifth_grade:grade_up
end

every :hour do
  rake '...'
end

タスクをcrontabに追加

schedule.rbに記述したタスクがcrontabファイルに追加される。これで完了。

$ whenever --update-crontab  

主なcrontabコマンド

crontab -l  # 設定されているcronを表示する
crontab -e  # crontabを編集する
crontab -r  # 設定されているcronを全削除する