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 |
上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。