在 django 管理面板中,我创建了大约 1500 个芹菜节拍的周期性任务,其中 100 个具有相同的 crontab 时间表15 4 * 1 * (m/h/d/dM/MY) UTC
(分钟/小时/天(的一周/月/月(。所有这些都已启用。
但是在第 1 个月的第 04:15 时,其中一个定期任务是未将到期任务发送给芹菜工人,而所有其他任务都在发送。在 django 管理面板中,这个定期任务的last_run_time是 None,这表明它没有被触发。
我尝试将 crontab 计划配置为15 * * * * (m/h/d/dM/MY) UTC
,然后在第 15 分钟成功运行。所以我想知道芹菜节拍周期性任务的数量是否有限制?
celery.py
app = Celery('myapp', broker=os.getenv('BROKER_URL', None))
@signals.setup_logging.connect
def setup_logging(**kwargs):
"""Setup logging."""
pass
app.conf.ONCE = {
'backend': 'celery_once.backends.Redis',
'settings': {
'url': 'redis://localhost:6379/0',
'default_timeout': 60 * 60
}
}
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
from django.utils import timezone
app.conf.update(
CELERY_ALWAYS_EAGER=bool(os.getenv('CELERY_ALWAYS_EAGER', False)),
CELERY_DISABLE_RATE_LIMITS=True,
# CELERYD_MAX_TASKS_PER_CHILD=5,
CELERY_TASK_RESULT_EXPIRES=3600,
# Uncomment below if you want to use django-celery backend
# CELERY_RESULT_BACKEND='djcelery.backends.database:DatabaseBackend',
CELERY_ACCEPT_CONTENT=['json'],
CELERY_TASK_SERIALIZER='json',
CELERY_RESULT_SERIALIZER='json',
# Uncomment below if you want to store the periodic task information in django-celery backend
CELERYBEAT_SCHEDULER = "django_celery_beat.schedulers.DatabaseScheduler",
# periodic tasks setup
CELERYBEAT_SCHEDULE={
'check_alerts_task': {
'task': 'devices.tasks.alert_task',
'schedule': 300.0 # run every 5 minutes
},
'weather_request': {
'task': 'organizations.tasks.weather_request',
'schedule': 60.0 # run every minute
},
'update_crontab': {
'task': 'devices.tasks.update_crontab',
'schedule': crontab(hour=0, minute=0)
},
'export_data_cleanup': {
'task': 'devices.tasks.delete_expiry_export_data',
'schedule': crontab(minute=0)
}
}
)
芹菜.log
[01/Jun/2020 04:15:09] INFO [celery.beat:271] Scheduler: Sending due task Report_first (reportAPI.tasks.report)
你的 crontab 实际上是错误的 ( 分钟小时 天 月 工作日 (
15 4 * 1 *
-> 1月(1月(每天04:15
你想要的是每月的第一天15 4 1 * *