我正在使用 DatabaseScheduler 運行 celery worker 和 celery beat。
我在 Heroku 上運行這些以及 django Web 應用程式。它們被用來定期發送電子郵件和文本,每天午夜發送一次電子郵件,早上 730 點發送文本。
我已經使用定期任務表中的 chrontab 手動定義了任務,但我也嘗試使用 celeryapp.conf.beat_schedule 在代碼庫中定義它們,兩者的行為相同。
任務看起來像這樣
django admin中的定期任務
我遇到的問題是 Heroku 作為一項策略每天重新啟動一次它的測功機,當這種情況發生時,celery beat dyno 出于某種原因運行我的定期任務。除錯日志讀取“調度程式:發送到期任務”就好像它是正常的,無論它們是否到期。我不知道為什么會這樣。
我的 celery 結果也與 postgres 支持的任務結果一起運行,看起來像這樣,我的任務在正確的時間(午夜和上午 730 點)運行,而且在 heroku 重新啟動 dynos 的某個隨機時間運行。
發生此重新啟動時,如何停止任務運行?為什么它們在重新啟動后完全運行?
django admin 中的任務結果
編輯:我能夠使用 heroku ps:restart beat 手動重啟并觀察它的發生,仍然不知道為什么,但這是它發生的除錯日志。請記住,今天的任務已經成功運行,并且 last_run 在重新啟動之前是正確的。此外,再次重新啟動不會再次運行任務。我想知道有時重啟是否看不到 last_run 日期?仍在試圖弄清楚這一點。
2022-10-15T16:22:33.824655 00:00 app[beat.1]: [2022-10-15 12:22:33,824: DEBUG/MainProcess] beat: Waking up in 5.00 seconds.
2022-10-15T16:22:38.828379 00:00 app[beat.1]: [2022-10-15 12:22:38,828: DEBUG/MainProcess] beat: Waking up in 5.00 seconds.
2022-10-15T16:22:43.832789 00:00 app[beat.1]: [2022-10-15 12:22:43,832: DEBUG/MainProcess] beat: Waking up in 5.00 seconds.
2022-10-15T16:22:46.627485 00:00 heroku[beat.1]: Restarting
2022-10-15T16:22:46.630753 00:00 heroku[beat.1]: State changed from up to starting
2022-10-15T16:22:48.836424 00:00 app[beat.1]: [2022-10-15 12:22:48,836: DEBUG/MainProcess] beat: Waking up in 5.00 seconds.
2022-10-15T16:22:48.894489 00:00 heroku[beat.1]: Stopping all processes with SIGTERM
2022-10-15T16:22:48.956144 00:00 app[beat.1]: [2022-10-15 12:22:48,956: DEBUG/MainProcess] Writing entries...
2022-10-15T16:22:48.956272 00:00 app[beat.1]: [2022-10-15 12:22:48,956: DEBUG/MainProcess] Writing entries...
2022-10-15T16:22:48.956533 00:00 app[beat.1]: [2022-10-15 12:22:48,956: DEBUG/MainProcess] Writing entries...
2022-10-15T16:22:48.956585 00:00 app[beat.1]: [2022-10-15 12:22:48,956: DEBUG/MainProcess] Writing entries...
2022-10-15T16:22:49.225748 00:00 heroku[beat.1]: Process exited with status 0
2022-10-15T16:22:50.122842 00:00 heroku[beat.1]: Starting process with command `celery -A hello beat -l debug --scheduler django_celery_beat.schedulers:DatabaseScheduler`
2022-10-15T16:22:50.807227 00:00 heroku[beat.1]: State changed from starting to up
2022-10-15T16:22:51.834963 00:00 app[beat.1]: celery beat v5.2.7 (dawn-chorus) is starting.
2022-10-15T16:22:52.276824 00:00 app[beat.1]: __ - ... __ - _
2022-10-15T16:22:52.276844 00:00 app[beat.1]: LocalTime -> 2022-10-15 12:22:52
2022-10-15T16:22:52.276845 00:00 app[beat.1]: Configuration ->
2022-10-15T16:22:52.276845 00:00 app[beat.1]: . broker -> redis://:**@ec2-54-165-246-156.compute-1.amazonaws.com:31259//
2022-10-15T16:22:52.276846 00:00 app[beat.1]: . loader -> celery.loaders.app.AppLoader
2022-10-15T16:22:52.276846 00:00 app[beat.1]: . scheduler -> django_celery_beat.schedulers.DatabaseScheduler
2022-10-15T16:22:52.276846 00:00 app[beat.1]:
2022-10-15T16:22:52.276846 00:00 app[beat.1]: . logfile -> [stderr]@
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/518108.html
