我在 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/