为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

如何在docker容器中运行cron作业?我试图在一个调用shell脚本的docker容器中运行一个cronjob。昨天我一直在网上搜索和堆栈溢出,但我真的找不到一个有效的解决方案。我怎样才能做到这一点?编辑:我创建了一个(注释的)github存储库,其中包含一个工作的docker cron容器,它以给定的时间间隔调用shell脚本。
查看完整描述

3 回答

?
胡说叔叔

TA贡献1804条经验 获得超8个赞

采用的解决方案在生产环境中可能是危险的

在docker中,每个容器只应执行一个进程,因为如果不这样做,则不会监视分叉并进入后台的进程,并且可能会在您不知情的情况下停止。

当您使用CMD cron && tail -f /var/log/cron.logcron进程基本上fork以便cron在后台执行时,主进程退出并让您tailf在前台执行。后台cron进程可能会停止或失败,您将不会注意到,您的容器仍将以静默方式运行,并且您的业务流程工具将不会重新启动它。

你可以通过直接将cron的命令输出重定向到你的docker stdout并且stderr分别位于/proc/1/fd/1和中来避免这种情况/proc/1/fd/2

使用基本的shell重定向,您可能希望执行以下操作:

* * * * * root echo hello > /proc/1/fd/1 2>/proc/1/fd/2

你的CMD将是: CMD ["cron", "-f"]


查看完整回答
反对 回复 2019-07-29
?
慕后森

TA贡献1802条经验 获得超5个赞

对于那些想要使用简单轻量图像的人:

FROM alpine:3.6# copy crontabs for root userCOPY config/cronjobs /etc/crontabs/root# start crond with log level 8 in foreground, output to stderrCMD ["crond", "-f", "-d", "8"]

其中cronjobs是包含cronjobs的文件,其形式如下:

* * * * * echo "hello stackoverflow" >> /test_file 2>&1# remember to end this file with an empty new line


查看完整回答
反对 回复 2019-07-29
  • 3 回答
  • 0 关注
  • 1928 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信