Dockerizin 一个 python 定时任务

Dockerizin a python cronjob

我有一个 python 脚本,它应该 运行 和 python3。现在我需要 运行 它作为一个 cronjob。然后将整个包裹装箱。因此,当安装时,docker 图像应该设置 cronjobs 和 运行 docker.

中的 python 脚本

我尝试执行以下命令,构建成功并且 运行ning 它也没有五个错误。但它不起作用。

这里有什么问题?

requirements.txt

Flask
waitress

app.py

from datetime import datetime

print("\nThis is the cronjob running...:" , str(datetime.now()),"\n")

Dockerfile

FROM python:3-alpine

ENV PROJ_DIR="/app"
ENV CRON_SPEC="* * * * *"
ENV LOG_FILE="${PROJ_DIR}/app.log"

WORKDIR ${PROJ_DIR}

COPY . ${PROJ_DIR}

RUN pip install -r requirements.txt

CMD echo "${CRON_SPEC} python ${PROJ_DIR}/app.py >> ${LOG_FILE} 2>&1" > ${PROJ_DIR}/crontab

CMD crontab ${PROJ_DIR}/crontab

CMD crontab -l

CMD cron && tail -f ${LOG_FILE}

如前所述,只有最后的CMD会被执行。您必须使用 RUN 运行 您的 shell 命令。

这里是您的 Dockerfile 的工作示例,需要进行必要的调整:

FROM python:3-alpine

ENV PROJ_DIR="/app"
ENV LOG_FILE="${PROJ_DIR}/app.log"
ENV CRON_SPEC="* * * * *" 

WORKDIR ${PROJ_DIR}

COPY . ${PROJ_DIR}

RUN pip install -r requirements.txt
RUN echo "${CRON_SPEC} python ${PROJ_DIR}/app.py >> ${LOG_FILE} 2>&1" > ${PROJ_DIR}/crontab
RUN touch ${LOG_FILE} # Needed for the tail
RUN crontab ${PROJ_DIR}/crontab
RUN crontab -l
CMD crond  && tail -f ${LOG_FILE} #crond runs per default in the background

这是否解决了您的问题?