大家好:
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