Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python cronjob中的Docker_Python_Docker_Cron_Dockerfile_Python 3.7 - Fatal编程技术网

python cronjob中的Docker

python 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

我有一个python脚本,它应该与python3一起运行。现在我需要将其作为cronjob运行。然后把整个包裹装进集装箱。因此,在安装时,docker image应该设置cronjobs并在docker中运行python脚本

我试着执行以下命令,构建成功,运行时也没有任何错误。但它不起作用

这里有什么问题

requirements.txt

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