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了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容