Django-crontab не выполняет задания на контейнере Docker
Я работаю над этим всю неделю, и, похоже, не понимаю, что я упускаю. Проблема проста, у меня есть контейнер, в котором запущена платформа на Django, и мне нужно создать Cronjob для небольшой задачи, я создал тестовый запрос, который выполняется каждую минуту и просто печатает лог для проверки, но он не работает, хотя он устанавливает cron, добавляет cronjobs, запускает службу cron, и я могу видеть их в crontab, они просто никогда не срабатывают.
Когда я только начинал, у меня был запущен Cron в одном экземпляре, но после прочтения этого Question я обнаружил, что мне нужно разделить его на 2 экземпляра, поскольку, очевидно, запущенный Django влиял на службу cron, поэтому, следуя этому, вот как я располагаю свои файлы:
docker-compose.yml
version: '3'
services:
auth:
build:
context: ./
dockerfile: ./devops/Dockerfile
args:
[Bunch of parameters]
container_name: auth
volumes:
- ./project:/app
ports:
- 8000:8000
environment:
[Bunch of parameters]
command: python manage.py runserver 0.0.0.0:8000
cron:
build:
context: ./
dockerfile: ./devops/Dockerfile
args:
[Bunch of parameters]
container_name: cron
volumes:
- ./project:/app
environment:
[Bunch of parameters]
command: cron -f
Dockerfile
FROM python:3.8
ENV PYTHONUNBUFFERED 1
WORKDIR /app
COPY ./devops/requirements.txt .
COPY ./project .
# COPY ./.env .
RUN apt-get update
RUN apt-get -y install cron
RUN cp ./.env . || echo "file not found"
RUN pip install -r requirements.txt
#Set permission to entrypoint.sh
RUN chmod +x entrypoint.sh
# start web server
ENTRYPOINT ["./entrypoint.sh"]
CMD ["gunicorn", "-b", "0.0.0.0:8000", "project.wsgi:application", "--workers=5"]
entrypoint.sh
#!/bin/sh
# Set up scheduled jobs, if this is the cron container.
if [ "$1" = cron ]; then
service cron start
python ./manage.py crontab add
service cron stop
fi
# Run whatever command we got passed.
exec "$@"
settings.py
CRONJOBS = [
('*/1 * * * *', 'apps.coupons.cron.test'),
]
cron.py
import logging
logger = logging.getLogger(__name__)
def test():
logger.warning('Hello World')
logger.debug('Hello World')
logger.info('Hello World')
logger.error('Hello World')
logger.critical('Hello World')
print("Hello World")
return "Finished"
Здесь вы видите, что cron был добавлен, и что cron запущен, и что выполнение cronjob вручную работает.
По-прежнему, не имеет значения, как долго я жду, не похоже, что Cronjob запускается автоматически каждую минуту (я проверяю это с помощью file.log, который я установил в опциях логгера settings.py). Что я делаю неправильно или чего не хватает, чтобы заставить cron работать?