django-celery-beat 垃圾邮件到期任务

Posted

技术标签:

【中文标题】django-celery-beat 垃圾邮件到期任务【英文标题】:django-celery-beat spams due tasks 【发布时间】:2022-01-22 23:23:32 【问题描述】:

我将django-celery-beat 用于一些每小时/每天的任务。然而,奇怪的行为让我不知所措。

我正在使用这段代码创建一个任务:

    periodic_task = apps.get_model('django_celery_beat', 'PeriodicTask')
    interval_schedule = apps.get_model('django_celery_beat', 'IntervalSchedule')

    schedule, _ = interval_schedule.objects.get_or_create(every=2, period='hours')

    periodic_task.objects.update_or_create(
        task=TASK,
        defaults='name': '<task description>', 'interval': schedule,
    )

其中TASK 是指向此任务的字符串:

@app.task(ignore_result=True)
def task():
    <things to do>
    pass

在你看到的代码中我使用了2小时的间隔,一旦我用celery -A [project-name] beat -l info --scheduler django_celery_beat.schedulers:DatabaseScheduler开始节拍,就没有弹出错误(我不知道它是否真的有效,2小时是很多时间)。但是,当我将时间间隔更改为 1 小时时,它会发送以下垃圾邮件:

[2021-12-21 15:32:45,333: INFO/MainProcess] Task app.tasks.task[6c0343b0-faf1-4eae-a8e0-721c862120a9] succeeded in 0.0s: None
[2021-12-21 15:32:45,336: INFO/MainProcess] Scheduler: Sending due task <task description> (app.tasks.task)

然后它会一直持续到永恒,只能通过 Ctrl+C 停止。

我确实安装了 RabbitMQ 管理插件,并且从 UI 看起来一切都很好 - 没有队列,没有任何未确认的内容等。任何线索这可能导致什么?

即使在清除队列之后,它仍然会发生(使用celery -A [project-name] purge)。

【问题讨论】:

【参考方案1】:

更新,我在这里找到了答案:https://github.com/celery/django-celery-beat/issues/95。我的TIME_ZONE 设置是错误的(仍然设置为 UTC 而不是我的实际时区,欧洲/阿姆斯特丹),所以我想这就是它搞砸的地方。

【讨论】:

以上是关于django-celery-beat 垃圾邮件到期任务的主要内容,如果未能解决你的问题,请参考以下文章

shell之检测域名到期时间并进行邮件通知

视频课程上线:域账号到期提前邮件提醒-AD域日常维护实战

基于PHP Memcache(d)的会话:是否应禁用垃圾收集?

我的postfix过滤邮件群发邮件问题 跟某云平台的故事

【python】django-celery-beat使用

python测试开发django-197.django-celery-beat 定时任务