如何在docker容器中运行cron作业?我试图在一个调用shell脚本的docker容器中运行一个cronjob。昨天我一直在网上搜索和堆栈溢出,但我真的找不到一个有效的解决方案。我怎样才能做到这一点?编辑:我创建了一个(注释的)github存储库,其中包含一个工作的docker cron容器,它以给定的时间间隔调用shell脚本。
3 回答
胡说叔叔
TA贡献1804条经验 获得超8个赞
采用的解决方案在生产环境中可能是危险的。
在docker中,每个容器只应执行一个进程,因为如果不这样做,则不会监视分叉并进入后台的进程,并且可能会在您不知情的情况下停止。
当您使用CMD cron && tail -f /var/log/cron.log
cron进程基本上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"]
慕后森
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
添加回答
举报
0/150
提交
取消