我有一个python脚本,应该用python3运行。现在我有一个需求,就是把它作为一个cronjob来运行。然后将整个包容器化。因此,当安装时,docker镜像应该设置cronjobs并在docker中运行python脚本。
我试着执行下面的内容,构建成功,运行也没有任何错误。但它不工作。
这里的问题是什么?
requirement.txt
Flask
waitress
app.py
from datetime import datetime
print("\nThis is the cronjob running...:" , str(datetime.now()),"\n")
Docker文件
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
将被执行。你必须运行你的 shell
命令,并带有 RUN
.
这里有一个你的工作例子 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
这能解决你的问题吗?