2015-09-08 56 views
1

我有一个Ubuntu 14.04码头图像,我想安排一个python脚本执行每分钟。我的DockerFile包含CMD ["cron","-f"]以启动cron守护进程。 crontab条目看起来是这样的:码头根crontab作业未执行

0,1 * * * * root python /opt/com.org.project/main.py >> /opt/com.org.project/var/log/cron.log 

/opt/com.org.project/main.py完全访问和root拥有和具有744权限设置;所以可以执行。

我的/opt/com.org.project/var/log/cron.log文件中没有显示任何内容,也没有显示/var/log/cron.log。然而ps aux | grep cron显示cron -f运行在PID 1

我错过了什么?为什么我的cron作业不在容器中运行?

这里是我的DockerFile内容要求:

FROM ubuntu 

# Update the os and install the dependencies needed for the container 
RUN apt-get update \ 
&& apt-get install -y \ 
nano \ 
python \ 
python-setuptools \ 
python-dev \ 
xvfb \ 
firefox 

# Install PIP for python package management 
RUN easy_install pip 

CMD ["cron", "-f"] 
+0

哪里crontab条目位于何处?你可以发布你的Dockerifle吗? – larsks

+0

@larsks我在root用户下使用'crontab -e'来添加crontab项。请检查dockerfile摘录的OP。 – sadmicrowave

+0

你有没有得到一个解决方案? – LearningSlowly

回答

2

你在哪里使用crontab -e?在运行docker的主机上还是在容器本身上?

我看不到您要在您提供的dockerfile中添加crontab条目。我建议你添加一个外部crontab文件是这样的:

ADD crontabfile /app/crontab 
RUN crontab /app/crontab 
CMD ["cron", "-f"] 

文件crontabfile有下一个被位于Dockerfile

image_folder 
| 
|- Dockerfile 
|- crontabfile 

crontabfile示例内容:

# m h dom mon dow command 
30 4 * * * /app/myscript.py 
2

为什么使用cron?只需编写如下的shell脚本:

#!/bin/bash 
while true; do 
    python /opt/com.org.project/main.py >> /opt/com.org.project/var/log/cron.log 
    sleep 60 
done 

然后只需将其设置为入口点即可。

ENTRYPOINT ["/bin/bash", "/loop_main.sh" ] 
+0

我会给你一些解决方案的解决方案,以解决我的问题,但我仍然想知道为什么cron作业没有执行... – sadmicrowave