Cron似乎无法在Ubuntu Docker容器上运行

时间:2018-09-12 16:46:39

标签: docker cron ubuntu-16.04

Dockerfile的相关部分:

RUN apt-get install -y cron
RUN service cron start

ADD cronjob /etc/cron.d/gptswmm-cron
RUN chmod 0644 /etc/cron.d/gptswmm-cron
RUN touch /var/log/cron.log

RUN crontab /etc/cron.d/gptswmm-cron
RUN cron

我检查了ps -ef的输出,但cron不存在。不管怎样,我可以在使用cron命令后手动将其旋转并显示出来(只是检查我的所有框,也可以执行service cron start)。

UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 15:54 pts/0    00:00:00 /bin/bash
root        41     0  0 15:59 ?        00:00:00 cron
root        65     0  0 16:02 ?        00:00:00 ps -ef

我做crontab -l并得到与我的cronfile中相同的内容(它也有空行和结尾):

MAILTO=""
* * * * * root python /var/test/testcron.py >> /var/log/cron.log 2>&1

Python文件仅在同一目录(确保与脚本位置相同的目录)中创建(或附加到现有文件的情况下)测试文件,重复相同的单词。尽可能简单的测试。 (我最初是将它回显到日志文件,但是这样做是因为我对python脚本中的情况比对bash更加满意)。 Python文件归root拥有,并拥有所有者的所有权限。

但是当我检查文本文件应该在哪里时,什么都没有。当我检查/var/log/cron.log时,它为空。

当我手动调用python /var/test/testcron.py时,它可以工作并创建输出文件。

因此,我进行了一些系统日志记录,最后在此重做Dockerfile:

RUN apt-get install -y rsyslog

重建并旋转容器。首先rsyslogd启动rsyslog,然后使用cron启动cron,并使用service start cron进行双重检查。

检查/var/log/syslog并发现cron似乎被调用,这些基本的两行每分钟重复一次:

... CRON[48]: (root) CMD (python /var/test/testcron.py >> /var/log/cron.log 2>&1^M)
... CRON[47]: (root) CMD (root python /var/test/testcron.py >> /var/log/cron.log 2>&1^M)

我在这里不知所措。一直在谷歌搜索和寻找各种解决方案,但到目前为止没有任何效果。

1 个答案:

答案 0 :(得分:1)

好像我已经从cron作业中删除了2>&1

* * * * * root python /var/test/testcron.py >> /var/log/cron.log

我已经从https://www.ekito.fr/people/run-a-cron-job-with-docker/复制了大部分过程,并认为也许是因为他的教程试图将其输出到控制台而造成了麻烦。

所有@brthornbury都归功于对原始问题的评论。发布作为答案的答案,以供其他偶然发现此问题的人查看。