docker 根 crontab 作业未执行

docker root crontab job not executing

我有一个 Ubuntu 14.04 docker 图像,我想在其中安排一个 python 脚本每分钟执行一次。我的 DockerFile 包含 CMD ["cron","-f"] 以启动 cron 守护进程。 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 cronPID 1 处显示 cron -f 运行。

我错过了什么?为什么我的 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"]

为什么要使用 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" ]

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

我看不到您在提供的 docker 文件中添加 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