如何在 docker 容器中使用 cron 运行 python 代码?

yoo*_*oon 2 cron docker

当使用CMD ["python3", "./mycode.py"].

现在,我想要的是每分钟运行该 python 代码。

之前的 Dockerfile(只需运行一次):

FROM python:3.7
RUN apt-get update && \
        apt-get install cron -y
RUN pip3 install requests
RUN head -n -1 /etc/ssl/openssl.cnf > /etc/ssl/temp && \
       mv /etc/ssl/temp /etc/ssl/openssl.cnf
RUN echo "CipherString=DEFAULT@SECLEVEL=1" >> /etc/ssl/openssl.cnf

COPY . /app
WORKDIR /app
CMD ["python3", "./mycode.py"]
Run Code Online (Sandbox Code Playgroud)

之后的 Dockerfile(使用 crontab 每分钟运行一次):

FROM python:3.7
RUN apt-get update && \
        apt-get install cron -y
RUN pip3 install requests
RUN head -n -1 /etc/ssl/openssl.cnf > /etc/ssl/temp && \
       mv /etc/ssl/temp /etc/ssl/openssl.cnf
RUN echo "CipherString=DEFAULT@SECLEVEL=1" >> /etc/ssl/openssl.cnf

RUN echo "* * * * * python /app/mycode.py" >> editcron && \
        crontab editcron

COPY . /app
WORKDIR /app
CMD ["cron", "-f"]
Run Code Online (Sandbox Code Playgroud)

但是在使用 构建并运行新的 docker 映像后docker run -d --rm DockerImage,它似乎不起作用。(而且, /var/log 目录中没有 cron 日志文件)

当我进入容器时docker exec -it DockerContainer /bin/bash,我可以确认crontab -l打印“* * * * * python /app/mycode.py”,并且python /app/mycode.py运行正常。

这里可能有什么问题?

Adi*_*iii 7

我经常将 crontab 配置保存在一个单独的文件中,它使 Dockerfile 保持干净且易于理解,

这是您可以尝试的工作示例

FROM python:3.6
RUN apt-get update && apt-get -y install cron vim
WORKDIR /app
COPY crontab /etc/cron.d/crontab
COPY hello.py /app/hello.py
RUN chmod 0644 /etc/cron.d/crontab
RUN /usr/bin/crontab /etc/cron.d/crontab
CMD ["cron", "-f"]

Run Code Online (Sandbox Code Playgroud)

定时任务配置

#run python script every minutes
* * * * * python /app/hello.py > /proc/1/fd/1 2>/proc/1/fd/2
Run Code Online (Sandbox Code Playgroud)

您可以在此 Github Repo 中查看完整的工作示例

docker-python-cronjob

在此输入图像描述