Почему мой django-crontab cronjob не выполняется?

У меня есть django-project с приложением app, в котором есть файл cron.py с функцией main_routine().

Я хочу, чтобы функция main_routine() вызывалась каждую минуту.

У меня django-project/django-project/settings.py есть следующее:

INSTALLED_APPS = [
    'django_crontab',
    ...
]

...

CRONJOBS = [
    ('*/1 * * * *', 'app.cron.main_routine')
]

Моя django-project/app/cron.py выглядит следующим образом:

from app.models import SomeModel
from django.utils import timezone

def main_routine():
    object = SomeModel.objects.get(name='TestObject1')
    object.updated = timezone.now()
    object.save()

Конечно, я побежал: python3 manage.py crontab add И терминал напечатал:

adding cronjob: (someHash) -> ('*/1 * * * *', 'app.cron.main_routine')

Чтобы быть в безопасности, я бегу: python3 manage.py crontab show И терминал печатает:

Currently active jobs in crontab:
someHash -> ('*/1 * * * *', 'app.cron.main_routine')

Чтобы проверить, все ли работает, я запустил: python3 manage.py crontab run someHash

Затем я смотрю на страницу администратора и вижу, что TestObject1 имеет дату updatet только что. (пока что все идет гладко)

Главная проблема: Сколько бы я не ждал, задание не будет выполнено автоматически.

Что я делаю не так?

Некоторая справочная информация:

  • Я запускаю это внутри Ubuntu Docker Conatiner на VPS, на котором больше ничего нет.

Во-первых: я до сих пор не знаю, почему crontab не работает.

Однако я нашел способ обойти эту проблему.

Вы можете использовать python advanced scheduler aka. apscheduler, чтобы заменить crontab.

Идея заключается в том, чтобы написать модуль, содержащий желаемую функциональность, и подключить его к одному из ваших приложений AppConfig в его apps.py файле.

В этой статье есть отличное руководство.

Не могу комментировать, потому что я новичок

Со мной происходило то же самое, пока я не запустил его вручную, как вы сделали (с хэшем). Оказалось, что в моем коде была ошибка, поэтому, когда он дошел до нее, crontab автоматически отменил ее, поскольку она выдавала ошибку!

Я установил 5-минутный таймер для проверки успешного выполнения задания, и это произошло. У меня точно такая же установка, как у вас (+ некоторые фабрики и api запросы)

Вернуться на верх