【发布时间】:2015-12-28 15:11:44
【问题描述】:
我有一个简单的 Dockerfile 如下
FROM ubuntu:latest
ADD crontab /etc/cron.d/test-cron
RUN chmod a+x /etc/cron.d/test-cron
RUN touch /var/log/cron.log
CMD cron && tail -f /var/log/cron.log
crontab文件的内容很简单
* * * * * root echo "Hello world" >> /var/log/cron.log 2>&1
# empty line
当我在本地 OS X 机器上运行它时(运行 docker-machine),它运行良好(“Hello world”每分钟打印到日志文件中)。但是,当我尝试在 Ubuntu 机器上运行它时,cron 作业没有运行(空日志文件)。
这是我用来运行容器的命令
docker build -t crontest .
docker run --name cron crontest
我不确定为什么会这样。我想知道我的 Ubuntu 盒子是否有问题(时间设置错误?)。我试图重新启动那台机器没有效果。我目前确实在 Ubuntu 机器上运行了其他 docker 容器,它们运行良好。
任何关于我可以做些什么来调试/修复此问题的建议将不胜感激。
编辑:
进入容器 (docker exec -it cron /bin/bash) 后,我可以验证 cron 正在那里运行:
root@a2ad451af8d9:/# ps -ef | grep cron
root 1 0 0 20:15 ? 00:00:00 /bin/sh -c cron && tail -f /var/log/cron.log
root 6 1 0 20:15 ? 00:00:00 cron
root 7 1 0 20:15 ? 00:00:00 tail -f /var/log/cron.log
root 25 11 0 20:21 ? 00:00:00 grep --color=auto cron
【问题讨论】:
-
我投票结束这个问题,因为它属于 AskUbuntu。
-
@TinyGiant 我能理解你来自哪里,但我认为这仍然是一个有效的问题,因为它也涉及到 docker。
-
@TriNguyen 你有没有想过这个问题?我遇到了完全相同的问题,如果您找到解决方案,我希望避免冗长的日志调查!
-
@DaveNovelli 不,不幸的是,我还没有弄清楚这一点:(
-
我在仔细查看日志后让它工作了。我必须解决两件事:1)我使用的是 Windows,并且我的 crontab 文件有 CRLF 而不是 LF 作为换行符。错误消息中的附加“^M”提示了我。 2)在我修复它之后,我有一个新的错误,表明一个错误的命令。我意识到,由于我使用的是用户 crontab 文件,因此我不需要命令开头的“root”。在那之后,它就像一个魅力。非常感谢@Dzamo 提供的 rsyslog 提示!