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

新手上路,请多包涵

我试图在 docker 容器中运行 cron 作业,但对我没有任何作用。

我的容器只有 cron.dailycron.weekly 文件。

crontab,cron.d,cron.hourly 在我的容器中不存在。

crontab -e 也不起作用。

我的容器使用 /bin/bash 运行。

原文由 Manoj Kalluri 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.8k
2 个回答

这是我运行我的一个 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.txt

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

入口.sh

 #!/bin/sh

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

脚本.sh

 #!/bin/sh

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

像这样构建

docker build -t mycron .

像这样跑

docker run -d mycron

添加您自己的脚本并编辑 crontab.txt,然后构建映像并运行。由于是基于alpine的,所以图片超级小。

原文由 Ken Cochrane 发布,翻译遵循 CC BY-SA 3.0 许可协议

crond 在 Alpine 上与 tiny 配合得很好

RUN apk add --no-cache tini

ENTRYPOINT ["/sbin/tini", "--"]
CMD ["/usr/sbin/crond", "-f"]

但不应作为容器主进程(PID 1)运行,因为僵尸收割问题和信号处理问题。有关详细信息,请参阅 此 Docker PR此博客文章

原文由 Jarek Przygódzki 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题