Django Celery превосходит отправку многочасовых заданий, но не ежедневных
Это действительно странная ситуация. Задачи, выполнение которых запланировано каждые несколько минут, каждый час в течение дня (например, "*/20 * * * *") отправляются в Celery (с записями в журнале Celery Beat), и Celery выполняет их. Задачи, которые должны выполняться один раз в день (например, "15 11 * * *"), не выполняются в назначенное время, и для них ничего не записывается в журнал Celery Beat.
Я проверил содержимое таблиц в базе данных, и все выглядит правильно, за исключением, конечно, того, что last_run_at
равно null для задач, которые не отправляются.
# select * from django_celery_beat_periodictask where id=7;
id | name | task | args | kwargs | queue | exchange | routing_key | expires | enabled | last_run_at | total_run_count | date_changed | description | crontab_id | interval_id | solar_id | one_off | start_time | priority | headers | clocked_id | expire_seconds
----+----------------------------------------------+---------------------------------+------+--------+-------+----------+-------------+---------+---------+-------------+-----------------+-------------------------------+-------------+------------+-------------+----------+---------+------------+----------+---------+------------+----------------
7 | hub_builtin__dhmaintenance.tasks.rotate_logs | dhmaintenance.tasks.rotate_logs | [] | {} | | | | | t | | 0 | 2025-09-25 04:39:20.172338+00 | | 6 | | | f | | | {} | |
# select * from django_celery_beat_crontabschedule where id=6;
id | minute | hour | day_of_week | day_of_month | month_of_year | timezone
----+--------+------+-------------+--------------+---------------+----------
6 | 30 | 0 | * | * | * | UTC
Оказывается, проблема была в том, что я обновил django-celery-beat
и не обновил также cron-descriptor
(была версия 1.4.5). После обновления cron-descriptor
до версии 2.0.6 проблема исчезла. Все задачи, включая те, которые выполняются раз в день, были отправлены в Celery в назначенное время.
pip install
я не жаловался на это, потому что django-celery-beat
требуется для cron-descriptor>=1.2.32
, хотя это явно неуместно, учитывая то, что я испытал.