我如何在Docker中运行cron? (即使使用简单的crontab也没有作业/输出)
我试图把一个cronjob放在我的docker容器里面,它运行一个python脚本。
我的Dockerfile:
FROM python:3.6.2 RUN apt-get update && apt-get -y install cron ADD . /dir WORKDIR /dir RUN pip install -r requirements.txt RUN chmod 0644 /dir ADD crontab /dir ENV NAME loader CMD cron -f
我的crontab文件:
* * * * * root /loader.py
正如我运行:
$ docker run -t -i loader:latest
10分钟后我什么也得不到。 脚本在运行时写出Hello World。 我从docker镜像中删除了cron,脚本工作并写出Hello world
正如我试图简化的东西,我试图离开的脚本,所以cron只写出喜欢这样的每一分钟像嗨:
* * * * * root echo "hi"
但没有任何反应。
有几个问题。
首先,像@charlesduffy提到的那样,你需要安装你的crontab
文件, cron
会find它(例如/etc/crontab
)。 出于testing目的,我使用了以下crontab
文件:
* * * * * root date > /tmp/flagfile
我使用Dockerfile
构build了一个映像,但是我添加了一个syslog服务来查看来自cron
的日志消息。 我的Dockerfile看起来像:
FROM python:3.6.2 RUN apt-get update && apt-get -y install cron busybox ADD . /dir WORKDIR /dir RUN chmod 0644 /dir COPY crontab /etc/crontab ENV NAME loader CMD busybox syslogd && cron -f
容器运行后,我在/var/log/messages
看到以下内容:
Dec 11 19:49:54 1d77fad4bf9d cron.info cron[9]: (CRON) INFO (pidfile fd = 3) Dec 11 19:49:54 1d77fad4bf9d cron.info cron[9]: (*system*) INSECURE MODE (group/other writable) (/etc/crontab) Dec 11 19:49:54 1d77fad4bf9d cron.info cron[9]: (CRON) INFO (Running @reboot jobs)
看起来cron
对/etc/crontab
上的权限感到不满。 我修改了我的Dockerfile
来修复:
FROM python:3.6.2 RUN apt-get update && apt-get -y install cron busybox ADD . /dir WORKDIR /dir RUN chmod 0644 /dir COPY crontab /etc/crontab RUN chmod 600 /etc/crontab ENV NAME loader CMD busybox syslogd && cron -f
现在,如果我运行容器,大约一分钟后,我看到/tmp/flagfile
显示,并在/var/log/messages
我看到:
Dec 11 19:57:16 dda8a21d48a4 cron.info cron[10]: (CRON) INFO (pidfile fd = 3) Dec 11 19:57:16 dda8a21d48a4 cron.info cron[10]: (CRON) INFO (Running @reboot jobs) Dec 11 19:58:01 dda8a21d48a4 authpriv.err CRON[71]: pam_env(cron:session): Unable to open env file: /etc/default/locale: No such file or directory Dec 11 19:58:01 dda8a21d48a4 authpriv.info CRON[71]: pam_unix(cron:session): session opened for user root by (uid=0) Dec 11 19:58:01 dda8a21d48a4 cron.info CRON[72]: (root) CMD (date > /tmp/flagfile) Dec 11 19:58:01 dda8a21d48a4 authpriv.info CRON[71]: pam_unix(cron:session): session closed for user root