安装:
在项目根目录Gemfile和capdeploy/CapApp/Gemfile,添加如下代码,并且在Gemfile所在目录分别执行:bundle install。执行完了之后上传到git
# Gemfile
# crontab管理
gem 'whenever', require: false
whenever的设置文件schedule.rb生成
下面的命令之后生成config/schedule.rb
$ bundle exec wheneverize .
> [add] writing `./config/schedule.rb'
> [done] wheneverized! #<= 成功
whenever的命令说明
command: bash命令执行
rake: rake的任务执行
runner: Rails内的方法
script: script执行
设定demo
# config/schedule.rb
# 出力先のログファイルの指定
set :output, 'log/crontab.log'
# ジョブの実行環境の指定
set :environment, :production
# 3時間毎に実行するスケジューリング
every 3.hours do
runner 'MyModel.some_process'
rake 'my:rake:task'
command '/usr/bin/my_great_command'
end
# 毎日 am4:30のスケジューリング
every 1.day, at: '4:30 am' do
runner 'MyModel.task_to_run_at_four_thirty_in_the_morning'
end
# 一時間毎のスケジューリング
every :hour do # Many shortcuts available: :hour, :day, :month, :year, :reboot
runner 'SomeModel.ladeeda'
end
# 日曜日のpm12時にスケジューリング
every :sunday, at: '12pm' do # Use any day of the week or :weekend, :weekday
runner 'Task.do_something_great'
end
# crontab型の設定「分」「時」「日」「月」「曜日」
# 毎月27日〜31日まで0:00に実行
every '0 0 27-31 * * ' do
command 'echo 'you can use raw cron syntax too''
end
# 6-24時まで3時間おきに実行
work_hour_per_two = (6..24).select{ |_| _%3 == 0 }.map {|_| "#{_}:00" }
every 1.day, at: work_hour_per_two do
rake 'my:rake:task'
end
如何写到crontab
# whenever设置更新
RAILS_ENV=development bundle exec whenever --update-crontab
# crontab设置删除
RAILS_ENV=development bundle exec whenever --clear-crontab
Capistrano的配合
设置方法,首先在下面的Capfile中追加如下代码:
require 'whenever/capistrano'
然后、config/deploy.rb中记入下面的:
set :whenever_identifier, ->{ "#{fetch(:application)}_#{fetch(:stage)}" }