Указанное время начала периодического задания игнорируется

Я пытаюсь указать время, в которое должна быть запущена периодическая задача, созданная с помощью приложения django-celery-beat, таким образом:

# Incomplete project structure
├── config
│   ├── asgi.py
│   ├── celery.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── manage.py
├── order_monitoring
│   ├── admin.py
│   ├── apps.py
│   ├── __init__.py
│   ├── models.py
│   ├── tasks.py
│   ├── tests.py
│   ├── urls.py
│   ├── utils
│   │   ├── scraperr
│   │   │   ├── browser.py
│   │   │   ├── chromedriver
│   │   │   ├── db_scraper
│   │   │   └── scraper.py
│   │   └── utils.py
│   └── views.py

# config/settings.py
...

USE_TZ = True
TIME_ZONE = 'Europe/London'

REDIS_HOST = '127.0.0.1'
REDIS_PORT = '6379'

CELERY_BROKER_URL = 'redis://' + REDIS_HOST + ':' + REDIS_PORT + '/0'
CELERY_BROKER_TRANSPORT_OPTIONS = {'visibility_timeout': 3600} 
CELERY_RESULT_BACKEND = 'redis://' + REDIS_HOST + ':' + REDIS_PORT + '/0'
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_IGNORE_RESULT = False
CELERY_BEAT_SCHEDULER = 'django_celery_beat.schedulers:DatabaseScheduler'

CELERY_ENABLE_UTC = False
CELERY_TIMEZONE = TIME_ZONE
# config/celery.py

import os

from celery import Celery
from celery.schedules import crontab


os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings')

app = Celery('config',)
app.config_from_object('django.conf:settings', namespace='CELERY')


app.autodiscover_tasks()
# order_monitoring/utils/utils.py
...

timezone = pytz.timezone('Europe/London')
schedule, _ = CrontabSchedule.objects.get_or_create(
    minute='1',
    hour='*',
    day_of_week='*',
    day_of_month='*',
    month_of_year='*',
    timezone=timezone,
)
localtime = datetime.datetime.now(pytz.timezone('Europe/London')) + datetime.timedelta(seconds=5)

try:
    task = PeriodicTask.objects.get(name='Monitor orders')
    task.crontab = schedule
    task.args = arguments
    task.start_time=localtime  # Here I set the time at which the task should start
except ObjectDoesNotExist as exception:
    task = PeriodicTask.objects.create(
    crontab=schedule,
    name='Monitor orders',
    task='monitor_orders',
    args=arguments,
    start_time=localtime,  # Here I set the time at which the task should start
)

if action == 'start':
    task.enabled = True
    task.save()
elif action == 'finish':
    task.enabled = False
    task.save()

PeriodicTask.objects.update(last_run_at=None)
PeriodicTasks.changed(task)

print('task date', task.start_time)  # It shows here that the date I need is set

Но в результате она не выполняется в указанное время через start_time. После невероятно огромного количества времени, проведенного в раздражении, я заметил, что если посмотреть на задачу через django shell, то значение параметра start_time будет иметь значение datetime.datetime(2022, 7, 30, 14, 29, 37, 727701, tzinfo=datetime.timezone.utc). Вопрос в том, как изменить время начала периодической задачи

Возможно, вы изменили настройки часового пояса Django.

Планировщик базы данных не перезагружается при изменении настроек, связанных с часовым поясом, поэтому вы должны сделать это вручную:

$ python manage.py shell
>>> from django_celery_beat.models import PeriodicTask
>>> PeriodicTask.objects.update(last_run_at=None)
Вернуться на верх