Почему мой 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 запросы)