rails3使用whenever定时执行一些task(其实是linux的cron job);

因为有个需求,“用户每天都要完成一个log的记录,如果没有完成的要通过邮件提醒;”
所以考虑使用whenever每天固定在23点检查,用户是否有做相应的操作。
whenever 安装:

gem 'whenever', :require => false #在Gamfile里面添加


然后就是进入程序的根目录底下运行:
wheneverize

这样whenever会给你初始化创建config/schedual.rb文件;
然后在该文件里面添加一下内容:

set :output, "#{path}/log/whenever.log" #设置日志输出文件
job_type :rake_no_env, "cd :path && rake :task :output" #自定义任务

every 1.day,:at=>'10:45am' do
rake_no_env "check_daylog" #每天早上:10:45运行 底下命令
end

这样会产生一下的linux计划任务:
[quote]
45 10 * * * /bin/bash -l -c 'cd /home/user/rails/app/root && rake check_daylog >> /home/user/rails/app/root/log/whenever.log 2>&1'
[/quote]
[color=red]
[color=red]
当然了,你也可以利用Rails的runner去执行一个静态方法,而不是使用rake;
[/color]
可以使用命令

every 1.day,:at=>'10:45am' do
runner "DayLog.check_daylog" #执行DayLog的静态方法或者modual:check_daylog;
end
[/color]
可以在程序根目录底下用
[quote]whenever[/quote]
命令查看任务,但是需要运行
[quote]whenever -i[/quote]
来更新添加到系统中;
可以使用linux的
[quote]
crontab -l
[/quote]
命令查看当前系统的所有cron job。
然后在Rails/app/root/lib/tasks目录底下添加文件用来写task;

require 'fileutils'
require 'open3'
#以上2个尚未验证是否需要require进来。在rails里面估计不需要;
desc "check daylog"
task :check_daylog do
check_file = "#{Rails.root}/app/mailers/check_daylog.rb"
FileUtils.cd(Rails.root) do
Open3.popen3("rails c #{Rails.env} < #{check_file} ") do |stdin, stdout, stderr|
puts stdout.read
puts stderr.read
#在控制台输出运行信息;
end
end
end


#{Rails.root}/app/mailers/check_daylog.rb文件内容将会被导入到rails的控制台太里面执行;

whenever -c [file]
用来取消任务;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值