我有一个简单的 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
最佳答案
使用 apt-get install rsyslog
在容器内安装 rsyslog,并在使用 cron -L15
启动 cron 之前使用命令 rsyslogd
启动它(最大记录)。然后观察容器内的文件 /var/log/syslog
以查看 cron 守护进程自己的日志输出。它会告诉您解析 crontab 是否有问题,如果它已注册并正在尝试运行您的作业,它会在您的情况下每分钟记录一个类似于以下内容的条目。
CRON[16]: (root) CMD (echo "Hello world">>/var/log/cron.log 2>&1)
关于ubuntu - cron 作业未在 ubuntu 上的 docker 容器内运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32872764/