Django Celery Beat 管理员更新 Cron Schedule 定期任务未生效

标签 django centos rabbitmq celery django-celery

我在 CentOS 7 上使用 Django 10、RabbitMQ 和 Celery 4 运行一个站点。

我的 Celery Beat 和 Celery Worker 实例由主管控制,我使用的是 django celery 数据库调度程序。

我已经使用 Django-admin 中的 cronsheduler 安排了一个 cron 风格的任务。

当我启动 celery beat 和 worker 实例时,作业会按预期触发。

但是如果在 Django-admin 中更改了计划时间,那么除非我重新启动 celery-beat 实例,否则更改不会生效。

我是否遗漏了什么或者我是否需要编写自己的调度程序?

Celery Beat,使用“django_celery_beat.schedulers.DatabaseScheduler”从数据库加载计划。根据以下文档 https://media.readthedocs.org/pdf/django-celery-beat/latest/django-celery-beat.pdf这应该强制 Celery Beat 重新加载:

以特定时间间隔(例如每 5 秒)运行的计划。 • django_celery_beat.models.CrontabSchedule A 日程 和 字段 喜欢 条目 在 cron:分钟小时星期几 day_of_month month_of_year。

django_celery_beat.models.PeriodicTasks 该模型仅用作跟踪时间表更改时间的索引。每当您更新 PeriodicTask 时,此表中的计数器也会递增,这会告诉 celery beat 服务从数据库重新加载计划。 如果批量更新定期任务,则需要手动更新计数器:

from django_celery_beat.models import PeriodicTasks
PeriodicTasks.changed()

从上面我希望 Celery Beat 进程定期检查表是否有任何更改。

最佳答案

我已经将 celery 从 4.0 更改为 3.1.25,将 django 更改为 1.9.11 并安装了 djcelery 3.1.17。然后再测试,就OK了。所以,这可能是一个错误。

关于Django Celery Beat 管理员更新 Cron Schedule 定期任务未生效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40579804/

相关文章:

django - Django LoginView 的success_url?

php - UTF-8 字符集 CentOS PHP

java - RabbitMQ channel 最佳实践

python - 如何使用 Python/Django 应用程序发送短信?

django - Django表单始终显示错误 “This field is required”

python - django-advanced-filters 'grp_tags' 不是有效的标签库

centos - 用于更正服务器上所有 cPanel 用户的文件权限的脚本

web - Tuleap 安装错误

java - 添加多个监听器将监听不同的 RabbitMQ 队列不工作

c# - RabbitMQ c# System.IO.EndOfStreamException 异常