在docker container中啟動定時任務

lg1919 8年前發布 | 36K 次閱讀 Docker

來自: http://dockone.io/article/1070

設置cron

在Linux中定時任務一般使用cron,ubuntu的官方鏡像中已經包含了cron,可以直接使用。但是因為cron是后臺執行,我們還需要另外一個進程來保持container的運行。 可以通過使用 tail -F ,來檢測一些log文件保持進程,也可以在container啟動的時候設置 -restart alwasy 。

下面是以ubuntu為例的 Dockerfile :

FROM ubuntu:14.04

創建腳本路徑

RUN mkdir /code

WORKDIR /code

ONBUILD ADD . /code

設置cron腳本

RUN crontab /code/crontabfile

安裝rsyslog

RUN apt-get -y install rsyslog

復制crontabfile到/etc/crontab

RUN cp /code/crontabfile /etc/crontab

RUN touch /var/log/cron.log

將run.sh設置為可執行

RUN chmod +x /code/run.sh

WORKDIR /code

CMD ["bash","/code/run.sh"]

run.sh

rsyslogd

cron

touch /var/log/cron.log

tail -F /var/log/syslog /var/log/cron.log

tail -F /var/log/syslog /var/log/cron.log 這里用來輸出系統和cron日志,并保持container運行。

crontabfile example

0 23 * * *  python /code/run.py cron >> /var/log/cron.log 2>&1

python /code/run.py 是要運行的定時任務。

build鏡像

將 Dockerfile , run.sh , crontabfile 放在腳本跟目錄下,運行 docker build -t your-image-name . 創建鏡像。

測試

在腳本根目錄下創建 run.py 腳本來測試鏡像。

run.py

if __name__ == '__main__':

print "I am runing by crontab"

運行

在有docker engining的機器上運行 docker run you-image-name 啟動定時任務,也可以根據具體情況添加其他啟動參數。

 本文由用戶 lg1919 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!