【问题标题】:docker root crontab job not executingdocker root crontab 作业未执行
【发布时间】:2015-12-04 14:12:31
【问题描述】:

我有一个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 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"]

【问题讨论】:

  • crontab 条目在哪里?你能发布你的 Dockerfile 吗?
  • @larsks 我在 root 用户下使用 crontab -e 添加 crontab 条目。请检查 OP 中的 dockerfile 摘录。
  • 你有没有得到解决方案?
  • @LearningSlowly 不,我没有。

标签: cron docker ubuntu-14.04 crontab dockerfile


【解决方案1】:

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

【讨论】:

  • 我会给你一些积分来解决我的问题,但我仍然想知道为什么 cron 作业没有执行......
【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-19
    • 2011-07-26
    • 2016-01-28
    • 2023-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-04
    相关资源
    最近更新 更多