【问题标题】:on heroku, celery beat database scheduler doesn’t run periodic tasks在 heroku 上,celery beat 数据库调度程序不运行定期任务
【发布时间】:2020-05-31 14:50:03
【问题描述】:

我有一个问题,即 django_celery_beat 的 DatabaseScheduler 不运行定期任务。或者我应该说当调度器是 DatabaseScheduler 时 celery beat 没有找到任何任务。如果我使用标准调度程序,任务会定期执行。

我在 heroku 上设置 celery,使用一个 dyno 为 worker 一个用于 beat(当然还有一个用于 web)。

我知道 beat 和 worker 连接到 redis 和 postgres 以获取任务结果。

我通过选择一个任务从 django admin 运行的每个定期任务,然后“运行选定的任务”都会被执行。

但是,大约两天后,我才试图弄清楚为什么 beat/worker 无法找到我安排了每 10 秒执行一次的任务,或者使用 cron(甚至重新启动 beat并且远程不会改变它)。

我有点绝望,我的下一步是尝试一下 redbeat。

任何有关如何解决此特定问题的帮助将不胜感激。我怀疑问题出在is_due 方法中。我正在使用 UTC(在 celery 和 django 中),所有 cron 都是基于 UTC 的。我在节拍日志中看到的只是“写条目..”。

我尝试将 celery 版本从 4.3 更改为 4.4,django celery beat 从 1.4.0 更改为 1.5.0 到 1.6.0

任何帮助将不胜感激。

【问题讨论】:

    标签: django celery django-celery-beat


    【解决方案1】:

    如果它可以帮助遇到或将遇到与我们类似的问题的人:重新创建此问题,可以创建一个简单的任务:

    @app.task(bind=True)
    def test(self, arg):
    
        print(kwargs.get("notification_id"))
    

    然后,在 django admin 中,进入任务编辑并在额外的 args 字段中添加一些内容。或者,反之亦然,任务可能是

    @app.task(bind=True)
    def test(self, **kwargs):
    
        print(notification_id)
    

    并尝试传递位置参数。虽然在本地这会中断,但在 Heroku 的节拍和工作人员测功机上,这会不知何故被忽视,并且 django_celery_beats 将来会停止处理任何任务。调度程序完全被“错误”任务破坏。

    【讨论】:

      猜你喜欢
      • 2021-03-09
      • 2014-04-14
      • 2020-06-05
      • 1970-01-01
      • 2015-10-24
      • 2019-02-16
      • 2016-12-28
      • 2020-04-05
      • 2015-09-07
      相关资源
      最近更新 更多