【问题标题】:Cron job doesn't run 'runner' task that uses SidekiqCron 作业不运行使用 Sidekiq 的“跑步者”任务
【发布时间】:2015-12-07 05:10:51
【问题描述】:

我使用Whenever gem 生成了一个Cront Job

every 15.minutes do
    command "date >> ~/cron.txt"
    runner "Location.update_days"
end

通过在命令行中输入crontab -l,我得到:

0,15,30,45 * * * * /bin/bash -l -c 'date >> ~/cron.txt'

0,15,30,45 * * * * /bin/bash -l -c 'cd /opt/www/my_app && bin/rails runner -e production '\''Location.update_days'\'''

显然command 任务工作得很好,我确实每 15 分钟将date 打印到cron.txt,但runner 任务没有运行。

Location.update_days 调用 Sidekiq 工作程序来执行任务,它在从 rails console 运行时工作,但在被 cron 调用时不工作。

def self.update_days
   new_day = self.new_day

   self.where( current_location: true,
            self.season => new_day[:timezone]
          ).find_each do |location|
            day = location.days.create new_day
            SidekiqWorker.perform_async day.id
          end
end

您是否知道可能出了什么问题或者我该如何调试这个问题?

【问题讨论】:

    标签: ruby-on-rails ruby cron sidekiq whenever


    【解决方案1】:

    我知道您说它从控制台运行正常,但是您是否尝试运行 cron 作业运行的 bash 脚本以查看是否存在明显错误?甚至在加载 Ruby 类之前,cron 作业可能会失败。

    /bin/bash -l -c 'cd /opt/www/my_app && bin/rails runner -e production '\''Location.update_days'\'''
    

    【讨论】:

    • 是的,它提示我到换行符,在行的 biginning 处显示 >,就像在 rails console 中一样,但是如果我输入类似 Location.first 的内容并按 Enter只是提示我到另一个新行而不显示任何结果
    • 你认为这是为什么呢?
    • 显然反斜杠导致了问题。没有它们,它可以在控制台中工作,但有点奇怪,因为它们是由每当添加的
    • $ bin/rails runner -e production 'Location.update_days'
    猜你喜欢
    • 2014-05-27
    • 2014-02-27
    • 1970-01-01
    • 2022-12-03
    • 2022-01-13
    • 2022-01-03
    • 2019-10-09
    • 1970-01-01
    • 2013-07-02
    相关资源
    最近更新 更多