Проблема с запуском Django crontab в контейнере Docker
Я пытаюсь создать простой cron в моем приложении django, но, несмотря на правильное добавление и запуск, cron не выполняется и не сохраняет журналы
settings.py
INSTALLED_APPS = [
'django_crontab',
]
CRONJOBS = [
('*/1 * * * *', 'myapp.cron.test_func', '>> /var/log/cron.log 2>&1'),
]
Dockerfile
python:3.12
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
WORKDIR /app
COPY requirements.txt .
RUN pip3 install --upgrade pip
RUN pip3 install --no-cache-dir -r requirements.txt
RUN apt-get update && \
apt-get install -y cron && \
apt-get clean
RUN touch /var/log/cron.log
docker-entrypoint.sh
python3 manage.py crontab add
service cron start
exec "$@"
При запуске контейнера команды выдают такие результаты:
crontab -l
*/1 * * * * * /usr/local/bin/python3 /app/manage.py crontab run <cron_id> >> /var/log/cron.log 2>&1 # django-cronjobs для my_project
python3 manage.py crontab show
<cron_id> -> ('*/1 * * * *', 'myapp.cron.test_func', '>> /var/log/cron.log 2>&1')
service cron status
cron запущен.
Ручной запуск cron командой «python3 manage.py crontab run <cron_id>» работает нормально, журналы пустые.
Последнее обновление проекта django-crontab было в 2016 году... более 8 лет назад. Вероятно, это мертвый проект.
Я бы рекомендовал реализовать пользовательскую команду администрирования django и зарегистрировать ее в crontab по старинке (crontab -e).
В файле bash настройте виртуальное окружение, затем вызовите пользовательский скрипт администрирования, как показано ниже python manage.py <имя_скрипта> --settings=<django_app>.settings
Запланируйте запуск скрипта в cron (например): 30 * * * * <путь_к_скрипту>/<имя_скрипта>.sh
Если вы добавляете свой bash-файл в git, убедитесь, что вы установили .sh-файл на поддержание выполнения. например, C:\Temp\TestRepo>git update-index --chmod=+x foo.sh