大家好:
R队最近接到一个任务,要每个月定时给指定的用户发送一封邮件,乘机研究了下redmine的定时任务,这里就给小伙伴们分享一下。
R队用的是rufus-scheduler定时任务。rufus-scheduler一共有五种类型定时任务:in, at, every, interval and cron,具体怎么用且听R队慢慢道来。。。
一. in、at类型定时任务
- in:设置在一段时间后执行
-
require 'rufus-scheduler' scheduler = Rufus::Scheduler.new scheduler.at ''2018/01/25' do puts "2018年1月25日执行定时任务" end
- at:在某一时间执行
-
require 'rufus-scheduler' scheduler = Rufus::Scheduler.new scheduler.at ''2018/01/25' do puts "2018年1月25日执行定时任务" end
二. every、interval、cron类型定时任务
- every和interval比较相似,都是设置在固定的间隔时间内重复执行,区别是every计算两次触发间隔时间,而interval计算的则是本次触发结束到下次触发开始的时间。
every类型:
require 'rufus-scheduler' scheduler.every '3h' do puts "每隔3小时执行一次" end
interval类型:
require 'rufus-scheduler' scheduler.interval '2h' do puts "每隔2小时执行一次" end
- corn:corn定时任务比起every和interval更加灵活,可以更加精确的设置定时器的触发时机。
require 'rufus-scheduler' scheduler.cron '00 09 * * *' do puts "每天上午9点执行一次" end
三. 定时任务开发实例
使用corn定时任务调用发送邮件的方法实现每月22号自动发送文档提醒邮件功能,具体实现代码如下:
require 'rubygems'
require 'rufus-scheduler'
require 'Mailer'
scheduler = Rufus::Scheduler.new
#设置定时任务为每月22号10点发送
scheduler.cron '00 10 22 * *' do
#执行定时任务时调用Mailer中的deliver_mail方法
Mailer.deliver_mail
end