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
这是否解决了您的问题?
我有一个 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
这是否解决了您的问题?