当前位置: 首页>>技术教程>>正文


cron作业未在ubuntu上的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

最佳方法

在使用cron -L15启动cron之前,使用apt-get install rsyslog在容器内安装rsyslog并使用命令rsyslogd启动它(最大日志记录)。然后,观察容器内的文件/var/log/syslog以查看cron守护程序自己的日志输出。它会告诉您在解析crontab时是否存在问题,并且如果您已经注册了并正在尝试运行您的工作,则它将每分钟记录一次类似于以下内容的条目。

CRON[16]: (root) CMD (echo "Hello world" >> /var/log/cron.log 2>&1)

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/10360.html,未经允许,请勿转载。