一、rufus-scheduler是什么
rufus-scheduler 是一个很简单的做定时任务的程序包,基本上可以解决我们日常中的定时任务。
rufus-scheduler支持五种模式的任务定义, in、at、every、interval、cron。
二、安装
Bash
gem install rufus-scheduler
三、使用
新建一个Ruby文件 demo.rb,写入如下代码:
Ruby
require 'rubygems'
require 'rufus/scheduler'
scheduler = Rufus::Scheduler.new
scheduler.in '20m' do
puts "order ristretto"
end
scheduler.at '2018-12-06 12:05' do
puts 'order pizza'
end
scheduler.cron '0 22 * * 1-5' do
every day of the week at 22:00 (10pm)
puts 'activate security system'
end
scheduler.every '5m' do
puts 'check blood pressure'
end
scheduler.interval '2h' do
puts "thinking..."
puts sleep(rand * 1000)
puts "thought."
end
scheduler.join
然后我们把它运行起来, ruby demo.rb
四、和rails结合使用
创建 config/initializers/scheduler.rb
Ruby
require 'rufus-scheduler'
Let's use the rufus-scheduler singleton
scheduler = Rufus::Scheduler.singleton
return if defined?(Rails::Console) || Rails.env.test? || File.split($0).last == 'rake'
scheduler.every '2s' do
Rails.logger.info "hello, it's #{Time.now.strftime('%Y-%m-%d %H:%M:%S')}"
Rails.logger.flush
end
五、注意事项
在 puma 的 deamon 模式下无法使用,具官方说明可以使用unicorn来跑
或者使用runit等方法运行程序才可以需使用代码禁止在console/test/rake下启动rufus-scheduler
六、优缺点
优点
不依赖其他外部工具,只在进程中就可以实现
时间可以精确到秒
模式众多 in/at/cron
缺点:
主进程关闭后就失效了
主进程关闭后会丢失之前所有已计划的任务
某个任务意外报错有可能导致整个进程退出