【发布时间】:2019-02-17 09:07:49
【问题描述】:
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
重建并启动容器。首先启动 rsyslog rsyslogd,然后使用 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)
我在这里不知所措。一直在谷歌上搜索各种解决方案,但到目前为止没有任何效果。
【问题讨论】:
-
尝试使用 python 二进制文件的绝对路径。同时删除这部分(2>&1^M),可能会出现一些错误。顺便说一句,“^M”是什么?很难知道这里出了什么问题。
-
用指向
/usr/bin/python的python运行它,并且没有2>&1的东西。不确定是哪一个(我会测试并弄清楚,但我的猜测是第二件事)。^M仍然附加在系统日志的末尾,就像现在的.../cron.log^M)一样。但是,我现在看到了输出文件。我会尽快报告是绝对指向 python 还是删除2>&1是它做了什么。
标签: docker cron ubuntu-16.04