Gem whenever 定时执行一个 model 里面的方法,rails ,怎么运行呢?

ginchenorlee · 2013年02月23日 · 最后由 Fighting_3 回复于 2017年08月29日 · 10873 次阅读

想用 whenever 定时去向数据库插入数据,测试:我是这样用的:有问题,请大家指教,怎么用不起呢:

record model 里写里一个方法:

def self.whenever_add create! end

然后 whenever 任务代码: every :day, :at => '5:25pm', :roles => [:app] do runner "Records.whenever_add" end

终端,运行 whenever -iw

这样以后是不是到那个时间后就会执行代码里?但是没有运行,求指教

runner 好像只是运行 rails runner,你要把你的代码写成一个文件 我说错了..

#1 楼 @jjym 那,我要定时执行 model 里面的代码 config/schedule.rb 里面怎么写呢?谢谢指教

#1 楼 @jjym

every 3.hours do runner "MyModel.some_process" rake "my:rake:task" command "/usr/bin/my_great_command" end

提示是 model 呢

可以检查一下 cron table, 有过有记录,就手动运行一遍试试

crontab -l

#4 楼 @allenwei

[simlegate@simlegate yicheng-checkon]$ crontab -l

Begin Whenever generated tasks for: w

0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58 * * * * /bin/bash -l -c 'cd /home/simlegate/workspace/yicheng-checkon && script/rails runner -e production '\''Record.whenever_add'\'''

End Whenever generated tasks for: w

结果是存在的,但是就是没有执行,是不是我还有什么没有做呢?

看样子应该是执行了,没有执行有可能中间报错了,你手动执行一下

我也是跟 LZ 类似的问题:

schedule.rb 里我是这么写的:

set :environment, :development

every 1.minutes do
    rake "terry:mail_test"
end

然后 terry.rake 文件是:

#encoding: UTF-8

namespace :terry do
    desc '发邮件测试'
    task :mail_test => :environment do
        UserMailer.welcome_email(User.find(1)).deliver
        puts "XXX"
    end
end

单独在命令行里执行rake "terry:mail_test"是没问题的,邮件收到,但我执行 whenever 就报这个:

terry@TerryUbuntu:~/RubymineProjects/EIMV5$ whenever
* * * * * /bin/bash -l -c 'cd /home/terry/RubymineProjects/EIMV5 && RAILS_ENV=development bundle exec rake terry:mail_test --silent'

## [message] Above is your schedule file converted to cron syntax; your crontab file was not updated.
## [message] Run `whenever --help' for more options.
terry@TerryUbuntu:~/RubymineProjects/EIMV5$ 

我哪怕执行了一个whenever --update-crontab也不行。求解……

好吧,是怎么执行起来的我还真不知道……似乎是重启服务似乎又不是,反正现在它正在连续发邮件中…… 关键是我理解错误,这个脚本写完后是不用“执行”的,因为这个是直接写进系统的 crontab 里了,系统自己会执行之。

这个 Gem 不错

#5 楼 @ginchenorlee 检查下 你的 linux 有没有安装 crond 这个服务

匿名 #11 2013年06月09日

楼主单独执行下面的命令看看: script/rails runner -e production 'Record.whenever_add' 看会不会报bash: script/rails: Permission denied

应该是运行了 估计有错误
你可以查看 /var/spool/mail/root 里面是否有报错 如果你没自己设置 output 的话

我之前自己也执行过一次 我是没设环境变量 所以 rake 执行不能哈

刚刚也在做这个 我是通过执行 rake every 1.day, :at => '0:20 am' do rake "auto" end

然后 新建 rake 文件处理 model

#11 楼 @Guest 你好,我手动运行该命令,确实发现日志中记录了 bash: script/rails: Permission denied,请问这是什么原因?

killernova 回复

大哥,我刚用这个,手动执行任务成功了,但是用 whenever 插件时,输出日志里报这个错 sh: bundle: command not found,是什么原因啊

killernova 回复

大哥,我刚用这个,手动执行任务成功了,但是用 whenever 插件时,输出日志里报这个错 sh: bundle: command not found,是什么原因啊

需要 登录 后方可回复, 如果你还没有账号请 注册新账号