rails中实现定时任务的之whenever
Whenever利用的是crontab,所以系统要支持crontab才可以使用它,它有清析的语法,可以和部署工具进行整合。
一、创建项目:rails new whenever_test --skip-bundle
进入项目文件夹: cdwhenever_test
打开Gemfile文件:vim Gemfile
把source 'https://rubygems.org'改为source 'https://ruby.taobao.org'。
在文件里加入:
gem 'whenever', :require => false
group :development do
gem 'mina'
end
然后运行:bundle install
二、使用whenever
运行命令:wheneverize.
这时它会生成一个config/schedule.rb文件,用vim打开该文件会有如下图的内容:
在这个schedule.rb文件里添加一个定时任务:
every :day, :at => '0:05am' do
runner "Order.update_status"
end
意思是每天在0:05执行,用来更新订单的状态。(代码自己定义,这里不再一一介绍。whenever语法请参考: https://github.com/javan/whenever)
运行命令:whenever
这个命令是查看当前schedule.rb文件里写的定时任务,包含未同步到crontab file的任务,以crontab的格式显示。
接下运行命令:whenever -i 或 whenever --update-crontab 把schedule.rb文件里的任务同步到crontab file。
用命令crontab -l 查看守护进程里可以执行的任务。
三、mina整合
把whenever整合进mina,关于mina的使用这里不再做介绍。直接进入整合说明。
在config/deploy.rb文件里顶部加入 require 'mina/whenever'
在部署任务里加入:
task :deploy => :environment do
deploy do
to :launch do
invoke :'whenever:update'
end
end
end
这样在用mina deploy 部署的时候可以更新服务器的crontab file了。