【问题标题】:No output on python docker cron jobpython docker cron作业没有输出
【发布时间】:2021-08-09 01:18:55
【问题描述】:

我一直在尝试在 docker 容器中设置一个简单的 cron 作业。当我构建并运行作业时,没有错误,但没有记录任何内容。如果我进入容器,我可以看到 crontab(即 crontab -l)并运行文件(python test.py)。 Idk 我缺少什么来查看计划的作业运行。如果它正在运行并且我的日志位置是错误的,或者它甚至根本没有运行,请识别它。

Dockerfile

FROM python:3.8.8
RUN apt-get update && apt-get -y install cron vim
WORKDIR /app
COPY crontab /etc/cron.d/crontab
COPY test.py /app/test.py
RUN chmod 0644 /etc/cron.d/crontab
RUN /usr/bin/crontab /etc/cron.d/crontab

# run crond as main process of container
CMD ["cron", "-f"]

crontab

* * * * * python /app/test.py > /proc/1/fd/1 2>/proc/1/fd/2
# new line

test.py

print('test')

【问题讨论】:

  • 如果我将您的输出与 linuxwiki.de/crontab 进行比较,您的 cronjob 似乎缺少句点(* * * * * 而不是 30 5 * * 3 之类的东西)
  • 我刚刚意识到上面的链接是德语的。你可以看看opensource.com/article/17/11/how-use-cron-linux
  • 错过期间是什么意思?我认为我的 crontab 格式正确?
  • 查看终端输出(此处)[phoenixnap.com/kb/… 如果我理解正确,crontab -l 会打印出 cronjob 前面有其“编码”句点(例如“0 5 * * 1”)但是在您的情况下,打印了一个“* * * * *”,这似乎不是有效期限
  • 啊我认为 * * * * * 是每分钟运行一次工作。至少那是我测试时的目标。

标签: python docker cron python-3.8


【解决方案1】:

我通过轻微的调整复制了你的设置:我用一个简单的echo >> /crontest.txt 替换了你的 python 脚本。它按预期工作。该文件在 docker 容器内创建,并且每分钟附加一行。 这给您留下了一个问题,为什么python /app/test.py > /proc/1/fd/1 2>/proc/1/fd/2 的行为与echo >> /crontest.txt 不同。

Dockerfile:

FROM python:3.8.8
RUN apt-get update && apt-get -y install cron vim
WORKDIR /app
COPY crontab /etc/cron.d/crontab
RUN chmod 0644 /etc/cron.d/crontab
RUN /usr/bin/crontab /etc/cron.d/crontab

# run crond as main process of container
CMD ["cron", "-f"]

crontab:

* * * * * echo "test" >> /crontest.txt 
# new line
  1. 构建docker镜像docker build --tag contest .
  2. 运行docker容器docker run -n crontest-container contest
  3. 执行到正在运行的容器docker exec -it crontest-container bash
  4. /crontest.txt的输出内容cat /crontest.txt(也可以查看crontab是否在运行top

【讨论】:

    猜你喜欢
    • 2015-10-14
    • 1970-01-01
    • 2020-01-13
    • 2015-01-05
    • 1970-01-01
    • 2013-02-14
    • 2012-12-18
    • 1970-01-01
    • 2016-10-07
    相关资源
    最近更新 更多