python cronjob中的Docker
我有一个python脚本,它应该与python3一起运行。现在我需要将其作为cronjob运行。然后把整个包裹装进集装箱。因此,在安装时,docker image应该设置cronjobs并在docker中运行python脚本 我试着执行以下命令,构建成功,运行时也没有任何错误。但它不起作用 这里有什么问题 requirements.txtpython cronjob中的Docker,python,docker,cron,dockerfile,python-3.7,Python,Docker,Cron,Dockerfile,Python 3.7,我有一个python脚本,它应该与python3一起运行。现在我需要将其作为cronjob运行。然后把整个包裹装进集装箱。因此,在安装时,docker image应该设置cronjobs并在docker中运行python脚本 我试着执行以下命令,构建成功,运行时也没有任何错误。但它不起作用 这里有什么问题 requirements.txt Flask waitress app.py from datetime import datetime print("\nThis is the cron
Flask
waitress
app.py
from datetime import datetime
print("\nThis is the cronjob running...:" , str(datetime.now()),"\n")
Dockerfile
如前所述,仅执行最后一个
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
这能解决你的问题吗?当你说“它不工作”时,会发生什么或不会发生什么?你是如何调试的;您看过文件系统的内容了吗?(Docker仅在容器启动时运行最后一个
CMD
)。我建议改为使用气流。是的,它现在可以工作,我可以看到Docker正在运行(Docker ps)。但现在的问题是如何检查日志,以查看的输出,我运行了docker logs-f,但id没有打印预期的输出。我想知道python是否没有运行。这里有办法检查问题吗?你等了多久?带有***
的cronjob每分钟都在运行。我也在本地检查了一下,我有一些日志。谢谢@CLNRMN,它在mac中工作,日志显示了预期的打印。但是当我在AWS Linux机器上运行同一个Docker时,它不会给出任何输出。是否有调试的方法或任何可能出错的想法。
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