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)
我在这里不知所措。一直在谷歌搜索和寻找各种解决方案,但到目前为止没有任何效果。
答案 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都归功于对原始问题的评论。发布作为答案的答案,以供其他偶然发现此问题的人查看。