【问题标题】:Cron Job in Docker not working - python appDocker 中的 Cron 作业不工作 - python 应用程序
【发布时间】:2021-09-10 18:57:27
【问题描述】:

Cron Job 中的内容似乎没有被执行,或者保存日志时出现问题。让我向您介绍我的文件:

crontatab

* * * * * python /bin/wrapper.py > /var/log/somelogfile.txt 2>&1

我没有使用 FROM ubuntu:20.04,而是使用带有安装了 python 的附加层的图像。我无法与您分享此图片,因为它是私人图片。

wrapper.py

import time
print ("Hello World!")
time.sleep(2)

Dockerfile

FROM ubuntu:20.04

RUN apt-get update && \
    apt-get install -y cron busybox

COPY crontab /opt
COPY wrapper.py /bin/wrapper.py
RUN crontab /opt/crontab

CMD busybox syslogd -C; cron -L 2 -f

在正在运行的 docker 中,我可以看到 Cron 作业在每分钟安排一次(busybox logread):

但是日志(实际上是“hello world”)没有保存到 /var/log/somelogfile.txt 我不知道内容是在 Crontab 作业中执行还是日志有问题。我想把它保存到日志文件中。

仅供参考,我可以直接从正在运行的 docker 运行以下命令(Docker 中的 -it 模式;/bin/bash): python /bin/wrapper.py > /var/log/somelogfile.txt 2>&1 并创建带有“hello world”的文件。

但不是通过 Cron 作业。

【问题讨论】:

    标签: python docker cron dockerfile devops


    【解决方案1】:

    即使您使用的是 Ubuntu 映像,默认情况下也不会安装 python,因此您需要安装它。改用这个修改后的 dockerfile:

    FROM ubuntu:20.04
    
    RUN apt-get update && \
        apt-get install -y cron busybox
    RUN apt-get install -y python3
    
    COPY crontab /opt
    COPY wrapper.py /bin/wrapper.py
    RUN crontab /opt/crontab
    
    CMD busybox syslogd -C; cron -L 2 -f
    

    另外修改 crontab 命令,改为用户 python3 而不是 python2:

    * * * * * python3 /bin/wrapper.py > /var/log/somelogfile.txt 2>&1
    

    【讨论】:

    • 我没有使用 FROM ubuntu:20.04,而是使用带有安装 python 的附加层的图像。我无法与您分享此图片,因为它是私人图片。所以这不是没有安装python的情况。
    • 那我建议登录到正在运行的容器并手动检查。
    • 我可以做``` sudo docker exec -it name_docker /bin/bash: python /bin/wrapper.py > /var/log/somelogfile.txt 2>&1 ``` 我得到了日志保存到txt。但它不能通过 Cron Job 工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-22
    • 2012-02-18
    • 2018-06-12
    • 2015-11-19
    • 2015-01-05
    • 2020-01-13
    相关资源
    最近更新 更多