Docker容器crontab未运行[重复]

Posted

技术标签:

【中文标题】Docker容器crontab未运行[重复]【英文标题】:Docker container crontab not running [duplicate] 【发布时间】:2020-02-23 06:07:30 【问题描述】:

我有一个基于 ubuntu 的 dockerfile 映像。我试图让 bash 脚本每天运行,但 cron 永远不会运行。当容器运行时,我检查 cron 是否正在运行。 bash 脚本运行良好,并且 crontab 命令很好地复制到了容器内。我似乎无法找到问题出在哪里。

这里是 Dockerfile:

FROM snipe/snipe-it:latest

ENV TZ=America/Toronto

RUN apt-get update \
    && apt-get install awscli -y \
    && apt-get clean \
    && apt-get install cron -y \
    && rm -rf /var/lib/apt/lists/*

RUN mkdir /var/www/html/backups_scripts /var/www/html/config/scripts

COPY config/crontab.txt /var/www/html/backups_scripts
RUN /usr/bin/crontab /var/www/html/backups_scripts/crontab.txt

COPY config/scripts/backups.sh /var/www/html/config/scripts

CMD ["cron","-f"]

最后一个命令 CMD 不起作用。一旦我删除了 cmd 命令,当我检查容器内的 cron 任务时就会收到此消息:

root@fcfb6052274a:/var/www/html# /etc/init.d/cron status
 * cron is not running

即使我在 crontab 之前启动 cron 进程,crontab 仍然没有启动

我该如何解决这个问题???谢谢

【问题讨论】:

Docker 镜像通常不运行任何服务,但这也取决于具体的镜像。你有没有检查过它是否应该在那里? @tripleee 这是一个基于 ubuntu 的图像 + 我确实在 dockerfile 中安装了 cron。最重要的是,即使我执行容器,手动启动 cron 进程,它仍然永远不会运行 crontab。 您的Dockerfile 没有证明这一点;您能否请edit您的问题澄清这发生在哪里以及如何发生? @tripleee snipe/snipe-it:latest 是一个基于 ubuntu 的镜像,并且 cron 使用“&& apt-get install cron -y \”安装。 crontab 被复制但从不运行 @tripleee。我不得不制作另一项服务以使其与原始服务一起工作。最重要的是,我发现在处理 bash 脚本期间没有注入环境变量,为什么?因为由于 cron 而运行的 sh 脚本,我们实际上需要源 + 导出 var。 cronjob 会打开一个新的 shell,这就是原因。 【参考方案1】:

您在 RUN 语句中运行 crontab。但这仅在图像创建期间运行,而不是在您实际使用生成的图像时运行。

【讨论】:

此图像由 docker 堆栈使用,那么我如何在 dockerfile 或 compose 文件中解决此问题?谢谢 CMD 中的 default 启动命令应该是一个脚本,它启动所有服务并注意保持它们运行。也许寻找在 Docker 中运行服务管理器的方法,这样您就不必用无限循环重新发明笨拙的黑客。但是要意识到像 runit 这样的传统服务管理器通常不适合 Docker。

以上是关于Docker容器crontab未运行[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 docker 容器中运行 cron 作业

flock防止crontab脚本周期内未执行完重复执行(转)

docker-compose未显示对代码的任何更改

在我将 cron 文件重新保存在 docker 容器中之前,Cron 作业不起作用

如何使用未部署在 swarm 中的 docker 容器从 docker swarm 访问服务?

Docker中未指定挂载点容器间volume卷的数据共享