我有一个由其他人设置的 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
添加您自己的脚本并编辑