如何通过 Dockerfile 入口点启动 cron

How to start cron through Dockerfile entrypoint

我正在尝试通过 Docker 入口点文件 运行 定时任务。

Docker文件:

FROM python:3.8-slim-buster
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
RUN apt-get update -y && apt-get install -y build-essential postgresql python-scipy python-numpy python-pandas cron libgdal-dev && apt-get clean && rm -rf /var/lib/apt/lists/*
COPY ./django-entrypoint.sh .
RUN mkdir /industrialareas
WORKDIR /industrialareas
COPY ./project .
COPY ./requirements.txt .
RUN chmod 755 /django-entrypoint.sh
RUN pip install --no-cache-dir -r requirements.txt
EXPOSE 8000
CMD ["/django-entrypoint.sh"]

django-entrypoint.sh:

#!/bin/bash
# Django
python /industrialareas/manage.py collectstatic --noinput
python /industrialareas/manage.py migrate
python /industrialareas/manage.py runserver 0.0.0.0:8000
# Cron
service cron restart
service cron status
python /industrialareas/manage.py crontab add
python /industrialareas/manage.py crontab show
exec "$@"

但只适用于 Django 命令,因为我检查过它 service cron status 并停止并且 python manage.py crontab show 和未添加方法。

如果我 运行 脚本手动运行良好 ./django-entrypoint.sh。 cron 作业已执行,我可以在日志文件中看到输出。

有人可以帮助我吗? 提前致谢。

更改命令顺序解决问题,cron 服务启动和作业运行良好。

django-entrypoint.sh:

#!/bin/bash
# Cron
service cron restart
python /industrialareas/manage.py crontab add
# Django
python /industrialareas/manage.py collectstatic --noinput
python /industrialareas/manage.py migrate
python /industrialareas/manage.py runserver 0.0.0.0:8000
exec "$@"