在 Docker 镜像中找不到 Crontab

在 Docker 镜像中找不到 Crontab

我有一个由其他人设置的 docker 镜像,但似乎没有安装 cron。当我尝试运行crontab -l(无论是以 root 用户还是非 root 用户身份)时,它显示command not found。但我确实看到/etc/cron.d文件夹中有一个文件:e2scrub_all

我很困惑 - 这个 docker 镜像是否有 cron?如果有,我该如何运行 cronjob?

答案1

通常,cron 文件与 cron/tab 无关。如果定期作业对程序至关重要(e2scrub就您的情况而言),则其程序包应依赖于 cron。因此,如果您希望 e2scrub 定期运行,最好将 cron 明确添加到 docker 映像中。

无论如何,您可以通过使用包管理器查找哪个包/etc/cron.d/e2scrub_all属于哪个包来确保这一点。这取决于发行版,所以我不能给你一个直接的过程。

答案2

是的,Docker 容器中没有 cron 是正常的。除非你想要一个 cron 容器。

原则上,容器中只有一个服务及其依赖项。

如果需要 cron,请为其启动另一个容器。

答案3

以下是我运行其中一个 cron 容器的方法。

Dockerfile:


FROM alpine:3.3

ADD crontab.txt /crontab.txt

ADD script.sh /script.sh

COPY entry.sh /entry.sh

RUN chmod 755 /script.sh /entry.sh

RUN /usr/bin/crontab /crontab.txt

CMD ["/entry.sh"]

crontab 脚本

*/30 * * * * /script.sh >> /var/log/script.log

入口文件

#!/bin/sh

# start cron
/usr/sbin/crond -f -l 8

脚本

#!/bin/sh

# code goes here.
echo "This is a script, run by cron!"

像这样构建

docker build -t mycron .

像这样运行

docker run -d mycron

添加您自己的脚本并编辑

相关内容