在docker container中啟動定時任務
來自: 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 啟動定時任務,也可以根據具體情況添加其他啟動參數。