`
iseesea
  • 浏览: 45595 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

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计划任务:
引用

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'


[color=red]
当然了,你也可以利用Rails的runner去执行一个静态方法,而不是使用rake;

可以使用命令
every 1.day,:at=>'10:45am' do
  runner "DayLog.check_daylog"    #执行DayLog的静态方法或者modual:check_daylog;
end
[/color]
可以在程序根目录底下用
引用
whenever

命令查看任务,但是需要运行
引用
whenever -i

来更新添加到系统中;
可以使用linux的
引用

crontab -l

命令查看当前系统的所有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]
用来取消任务;





2
2
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics