何时不会触发Sidekiq任务

4

我试图设置一个Sidekiq调度程序来运行定期工作。

我可以在Rails控制台或Rails应用程序中成功运行Sidekiq任务。我可以让Whenever触发命令。然而,我无法让Whenever触发Sidekiq任务。

我在不同的机器上复制了我的工作,并且在一些机器上我使其正常工作。在大多数其他机器上,它无法正常工作。

这是我的设置:

# app/workers/create_random_product.rb
class CreateRandomProduct
  include Sidekiq::Worker

  def perform
    new_product = Product.new
    new_product.name = "Product #{Time.now}"
    new_product.price = 5.5
    new_product.save
  end
end

# config/schedule.rb
every 1.minute do
  runner "CreateRandomProduct.perform_async"
  command "echo 'hello' >> /home/vagrant/output.txt"
end

如您在schedule.rb中所见,我可以运行第二个命令,因为我能看到输出已更新,但第一个runner命令似乎没有任何操作。Sidekiq仪表板也没有显示任何活动。

运行“whenever”会返回以下cron作业:

* * * * * /bin/bash -l -c 'cd /home/vagrant/sidekiqdemo && bin/rails runner -e production '\''CreateRandomProduct.perform_async'\'''

* * * * * /bin/bash -l -c 'echo '\''hello'\'' >> /home/vagrant/output.txt'

我已经手动运行了第一条命令,并且它确实触发了Sidekiq作业。

我执行了“whenever -i”命令来更新crontab文件。我检查了crontab日志,发现它尝试触发Sidekiq作业:

Oct 16 16:15:01 vagrant-ubuntu-trusty-64 CRON[13062]: (vagrant) CMD (/bin/bash -l -c 'cd /home/vagrant/sidekiqdemo && bin/rails runner -e production '\''CreateRandomProduct.perform_async'\''')
Oct 16 16:15:01 vagrant-ubuntu-trusty-64 CRON[13063]: (vagrant) CMD (/bin/bash -l -c 'echo '\''hello'\'' >> /home/vagrant/output.txt')

我有没有漏掉什么重要的内容?


这个问题有什么解决方案吗? - knowbody
我没有找到一个合适的解决方案。最终我使用了Sidetiq gem。它并不是完美的解决方案,但它可以让一个任务重新安排自己。 - Khanetor
谢谢@Khanetor,我实际上也做了同样的事情。我会尝试调试并回来这里。 - knowbody
我刚刚成功地运行了你的代码,让它正常工作的一件事是通过清理crontab来更新它:crontab -r,然后使用whenever --update-crontab --set environment='development'在本地测试。 - luzny
1个回答

1
我解决了这个问题,按照此处建议定义了一个新的job_type。为了让它工作,您还需要安装sidekiq-client-cli
此外,我通过这篇文章发现,当从cron进程执行命令时,只设置一组环境变量,因此在我的情况下,命令无法正常工作,因为我的BUNDLE_PATH未设置。最终,我的可行的job_type如下所示:
job_type :sidekiq, "cd :path && BUNDLE_PATH=/bundle /usr/local/bin/bundle exec sidekiq-client :task :output"

every 1.minute do
  sidekiq "push GenerateExportsWorker"
end

这就是为什么在我的情况下,像

这样的命令会被使用。
every 1.minute do
  command "echo 'you can use raw cron syntax too' >> /home/log/myscript.log 2>&1 "
end

尽管其他。


你知道Runner不起作用的原因吗? - Sanjay Prajapati

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接