在 Docker 中运行 cron 可以工作,但总是出错“/bin/sh: root: command not find”

问题描述 投票:0回答:1

我有以下

Dockerfile

FROM centos:7
RUN yum -y install crontabs
COPY --chmod=0644 dockerfiles/crontab /etc/cron.d/server-cron
RUN crontab /etc/cron.d/server-cron
RUN touch /var/log/cron.log
CMD crond && tail -f /var/log/cron.log

crontab
文件里面的内容如下:

* * * * * root echo "Hello world" >> /var/log/cron.log 2>&1

当容器启动并运行时,我可以看到 cron 服务器正常工作,因为

tail -f
正在将
Hello world
打印到控制台,但也打印以下错误:

/bin/sh:root:找不到命令

我在 Google 上搜索过,但没有发现与 Docker 相关的内容:

(以及更多)

有没有办法在 Docker 容器中消除此错误,或者我应该忽略它并不管它?

docker cron dockerfile centos7
1个回答
0
投票

TLDR;从 Dockerfile 中删除此行:

RUN crontab /etc/cron.d/server-cron

更长的解释

您实际上是在尝试运行 cronjob 两次。

当运行 Dockerfile 时,您正在创建一个用户 cronjob:

RUN crontab /etc/cron.d/server-cron

crond
还将运行目录
/etc/cron.d/
中定义的任何内容(这些是系统 cronjobs)。

所以你看到的是第一个 cronjob(由 crontab 加载的)失败。正如您发布的第一个链接中所解释的。使用 crontab 加载的 Cronjobs 具有不同的格式,并且不应定义用户(它们始终以创建它的用户身份运行)。

但是您还会看到第二个 cronjob(在

/etc/cron.d
下定义的文件)成功,因为它的格式正确,定义了用户。

© www.soinside.com 2019 - 2024. All rights reserved.