ubuntu - cron 作业未在 ubuntu 上的 docker 容器内运行

标签 ubuntu cron docker

我有一个简单的 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/

相关文章:

linux - 如何设置cron来显示gui应用程序

Docker 运行 java 应用程序

php - CRON 作业的 MySQL 权限

r - 构建每 3 个月的第一个工作日运行的 cron 作业

apache - 一个虚拟主机显示来自其他虚拟主机的网站

linux - 增加 AWS EC2 实例中 Beanstalkd 的最大打开文件数

python - 树莓派3开机自动录像

docker - 为什么在运行sudo docker-compose up时出现权限错误?

linux - Docker Devmapper 空间问题 - 增加大小

ubuntu - Redis 服务器未启动