簡體   English   中英

在Docker容器中運行預定的cron作業的解決方案?

[英]Solution for running scheduled cron job within a Docker container?

我有一個Docker容器,我安裝了我的Python工具,包括我的Luigi管道接口。 我想運行一個shell腳本,它使用cron每周啟動我的Luigi管道。

我嘗試過高低,讓cron在Docker容器中工作。 在我的生活中,我不能讓我的crontab -e文件運行。

在我的檔案中,我有:

0 0 * * Sun /data/myscript.sh

接着是一條新線。 Cron正在后台運行 - ps aux | grep cron ps aux | grep cron顯示/usr/sbin/cron正在運行。 此外,在我的/var/log/syslog文件中,我有:

/USR/SBIN/CRON[2037]: (root) CMD (/data/myscript.sh)

我也試過使用0 0 * * Sun . /root/.bashrc ; sh /data/myscript.sh 0 0 * * Sun . /root/.bashrc ; sh /data/myscript.sh

但是,我的腳本沒有運行(當我使用bash myscript.sh手動運行我的腳本時,我得到了預期的結果)。

建議?

由於沒有調度程序正在運行,因此計划任務不會在普通容器內運行。 唯一的活動任務是您選擇通過CMD關鍵字或Entrypoint運行的任務。

為了執行計划任務,使用主機調度程序和docker exec命令更為謹慎:

docker exec <container> <command>
docker exec <container> /data/myscript.sh

所以你最終會在你的主機上找到一個cron:

(Crontab樣式)0 * * * * root docker exec mycontainer /data/myscript.sh

如果您有一個群集,則必須首先查詢群集以找到容器,或者甚至讓腳本為您執行此操作。

容器僅用於一個運行主進程。 您需要運行crond作為容器的主要進程,或者確保crond與主進程一起運行。 這種打破容器的合同/點,但有時這樣設置起來更容易。 說明如下:

我的Dockerfile具有以下ENTYPOINT

ENTRYPOINT ["/startup.sh"]

然后在startup.sh我做了一些事情來啟動容器,但最重要的是在執行最后一個命令之前,我有這個:

crond
exec start_my_service

crond啟動執行crons的守護進程,然后start_my_service成為我的容器的主要進程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM