我在CentOS 7上使用Django 10,RabbitMQ和Celery 4运行网站。
我的Celery Beat和Celery Worker实例由主管控制,我使用django芹菜数据库调度程序。
我已经使用Django-admin中的cronsheduler计划了一个cron样式的任务。
当我开始芹菜殴打和工人实例时,工作按预期点火。
但是如果在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 一个 时间表 同 领域 喜欢 项 在 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流程会定期检查表格是否有任何变化。
答案 0 :(得分:2)
答案 1 :(得分:1)
我有一个解决方案:
有点长的啰嗦,但做的工作。还可以更轻松地在需要相同功能的同一台服务器上管理多个Django应用程序。