Whenever是超级简单的管理crontab的第三方

安装:

在项目根目录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)}" }

你可能感兴趣的:(Whenever是超级简单的管理crontab的第三方)