繁花不似錦
2019-07-29 11:02:47
如何在docker容器中運行cron作業(yè)?我試圖在一個調(diào)用shell腳本的docker容器中運行一個cronjob。昨天我一直在網(wǎng)上搜索和堆棧溢出,但我真的找不到一個有效的解決方案。我怎樣才能做到這一點?編輯:我創(chuàng)建了一個(注釋的)github存儲庫,其中包含一個工作的docker cron容器,它以給定的時間間隔調(diào)用shell腳本。
3 回答

胡說叔叔
TA貢獻1804條經(jīng)驗 獲得超8個贊
采用的解決方案在生產(chǎn)環(huán)境中可能是危險的。
在docker中,每個容器只應執(zhí)行一個進程,因為如果不這樣做,則不會監(jiān)視分叉并進入后臺的進程,并且可能會在您不知情的情況下停止。
當您使用CMD cron && tail -f /var/log/cron.log
cron進程基本上fork以便cron
在后臺執(zhí)行時,主進程退出并讓您tailf
在前臺執(zhí)行。后臺cron進程可能會停止或失敗,您將不會注意到,您的容器仍將以靜默方式運行,并且您的業(yè)務流程工具將不會重新啟動它。
你可以通過直接將cron的命令輸出重定向到你的docker
stdout
并且stderr
分別位于/proc/1/fd/1
和中來避免這種情況/proc/1/fd/2
。
使用基本的shell重定向,您可能希望執(zhí)行以下操作:
* * * * * root echo hello > /proc/1/fd/1 2>/proc/1/fd/2
你的CMD將是: CMD ["cron", "-f"]

慕后森
TA貢獻1802條經(jīng)驗 獲得超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
提交
取消