我正在尝试将一个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只会像每天一样写出像hi这样的东西:
* * * * * root echo "hi"
但没有任何反应。
答案 0 :(得分:0)
有几个问题。
首先,正如@charlesduffy所提到的,您需要在crontab
找到它的cron
文件中安装它(例如,/etc/crontab
)。出于测试目的,我使用了以下crontab
文件:
* * * * * root date > /tmp/flagfile
我使用Dockerfile
构建了一个图像,但我添加了一个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