簡體   English   中英

Heroku Scheduler任務未按預期運行

[英]Heroku Scheduler task not running as expected

我正在使用Heroku的Scheduler插件在預定的時間間隔在我的應用程序中運行作業,就像傳統服務器環境中的cron一樣。 這些任務相當簡單,因為它們只是將一個sidekiq工作者排入隊列。 但是,正如您在下面的照片中看到的那樣:update_job_posts由於某種原因無法在4:30UTC運行。

我不能用這種方式組合這兩個工作,還是需要單獨運行?

如果我用heroku run任務,它就會通過。 heroku run用於執行您的作業,因此您可以放心,如果它適用於heroku運行,它將在調度程序中運行。

$ heroku run rake scheduler:update_job_posts
Running rake scheduler:update_job_posts on ⬢ agile-temple-76502... up, run.6604 (Free)
Updating Job feed...
I, [2018-06-06T04:40:50.341411 #4]  INFO -- : [ActiveJob] Enqueued JobFeedImportJob (Job ID: e3b9a0ed-aacb-45af-84f9-ef02acfeb85e) to Sidekiq(default)
I, [2018-06-06T04:40:50.344400 #4]  INFO -- : [ActiveJob] Enqueued RemoteFeedImportJob (Job ID: b965853d-adb3-46ee-b48d-f19306ce9d2a) to Sidekiq(default)
done.

此外, heroku logs --tail顯示正在運行的其他任務:

heroku[scheduler.5009]: Starting process with command `bundle exec rake scheduler:update_news_articles`
heroku[scheduler.5009]: State changed from starting to up
app[scheduler.5009]: Updating News feed...
app[scheduler.5009]: I, [2018-06-06T04:31:05.636594 #4]  INFO -- : [ActiveJob] Enqueued NewsFeedImportJob (Job ID: d672b0c5-598b-4eb7-81b6-1a0d2d8a5891) to Sidekiq(default)
app[scheduler.5009]: done.
app[worker.1]: 4 TID-tfdlg NewsFeedImportJob JID-d999a576b3193a404b3d8fdd INFO: start
app[worker.1]: I, [2018-06-06T04:31:05.636769 #4]  INFO -- : [ActiveJob] [NewsFeedImportJob] [d672b0c5-598b-4eb7-81b6-1a0d2d8a5891] Performing NewsFeedImportJob from Sidekiq(default)
heroku[scheduler.5009]: Process exited with status 0
heroku[scheduler.5009]: State changed from up to complete

scheduler.rake

namespace :scheduler do
  desc "Enqueue sidekiq job, fetches events, and creates a record for new entries"
  task :update_event_feed => :environment do
    puts "Updating Event feed..."
    EventFeedImportJob.perform_later
    puts "done."
  end

  desc "Enqueue sidekiq job, fetches job posts, and creates a record for new entries"
  task :update_job_posts => :environment do
    puts "Updating Job feed..."
    JobFeedImportJob.perform_later
    RemoteFeedImportJob.perform_later
    puts "done."
  end

  desc "Enqueue sidekiq job, fetches news articles, and creates a record for new entries"
  task :update_news_articles => :environment do
    puts "Updating News feed..."
    NewsFeedImportJob.perform_later
    puts "done."
  end
end

Heroku調度程序

Known issues and alternatives

Heroku調度程序在文檔中說

Scheduler是一個免費的附加組件,不保證作業將在預定的時間執行,或者根本不執行:

在極少數情況下,可能會跳過作業。

在極少數情況下,工作可能會運行兩次。

我在某些情況下實現了這一點,我注意到幾天之后它已經不能正常使用后台進程然后再次閱讀他們的文檔並找出原因。

現在我已經實現了sidekiq-scheduler並且它正常工作。

我希望它會有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM