2014-10-16 79 views
3

我想設置一個Sidekiq調度程序來運行重複作業。每當不觸發Sidekiq作業

我可以讓Sidekiq作業在Rails控制檯或Rails應用程序中正常運行。我可以得到每當觸發命令。但是,我無法每當觸發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儀表板也不顯示任何活動。

運行「每當」返回這些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工作。

我確實運行過「任何-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

解決此問題的任何解決方案? – knowbody 2015-03-03 11:57:09

+0

我還沒有找到。我最終使用了Sidetiq的寶石。這不是一個完美的解決方案,但它所做的就是重新安排工作。 – Khanetor 2015-03-03 15:16:08

+0

謝謝@Khanetor,我其實也是這麼做的。將嘗試調試它,並返回到這裏 – knowbody 2015-03-03 15:34:28

回答

0

我解決了這個問題,定義了一個新的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 

儘管其他。