我正在尝试设置Sidekiq调度程序来运行重复性作业。
我可以让Sidekiq作业在Rails控制台或Rails应用程序中正常运行。我可以得到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中看到的那样,我可以运行第二个命令,因为我可以看到输出已更新,但第一个运行器命令似乎没有做任何事情。 Sidekiq仪表板也没有显示任何活动。
运行“when”返回这些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作业。
我确实运行了"never -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')
我有什么遗失的吗?
答案 0 :(得分:1)
我解决了这个定义新job_type
的建议here。
为了实现这一点,您还必须安装sidekiq-client-cli。
此外,我发现感谢this帖子,当从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
尽管另一个。