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打开该文件会有如下图的内容:

rails中实现定时任务的之whenever_第1张图片

在这个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了。

你可能感兴趣的:(rails中实现定时任务的之whenever)