我想知道如何在 docker swarm 中配置單獨的 cron 作業容器,以便在單獨的進程/容器中執行 cron 作業。我想總結我從幾篇文章中收集到的一些知識,直到我在 docker swarm 中完成所有 cron 工作。請在評論中添加改進,或者如果可以的話直接編輯它們。
這是使用 docker 17.04 和用於 cron 作業的 debian:jessie 容器進行測試的。
答案1
建造
Dockerfile對於 cron 作業容器,安裝 cron,在容器啟動時啟動 cron 服務,然後使用 tail 指令保持容器執行
RUN apt-get update && apt-get install -qq -yes cron
CMD service cron start && tail -f /dev/null
作品
docker-compose.yml
services:
cron:
image: debian:jessie
volumes:
- mycronjobs:/etc/cron.d
工作文件
在專案根路徑中有一個包含 cron 作業的資料夾(僅在檔案名稱中使用底線表示特殊字元)
me@machine:/projectdir$ ls -al
-rw-rw-r-- 1 me me 978 Apr 26 17:49 docker-compose.yml
-rw-rw-r-- 1 me me 1052 Apr 26 18:06 Dockerfile
drwxrwxr-x 6 me me 4096 Apr 26 16:57 mycronjobs
me@machine:/projectdir$ ls -al mycronjobs
-rw-rw-r-- 1 me me 978 Apr 26 17:49 job-dash-bad
-rw-rw-r-- 1 me me 1052 Apr 26 18:06 job_underscore_good
-rw-rw-r-- 1 me me 1052 Apr 26 18:06 check_running
工作定義
你可以有 cron 作業
/var/spool/cron/crontabs/mycrontab這是透過 cli 工具創建的$ 定時任務/ 又稱使用者 crontab
/etc/crontabs這是系統範圍內的 crontab 集合
- '* * * * *' root /bin/touch /projectdir/system_crontab_works # 不帶 's
- /etc/cron.daily這是包含每天運行的普通 bash 腳本的資料夾
- /etc/cron.d這是一個包含系統範圍的 cron 作業的資料夾,其檔案類似於/etc/crontabs。文件不得包含破折號,只能包含底線
- sudo vi /etc/cron.d/system_cron
- '* * * * *' root /bin/touch /projectdir/system_cron.d_works # 不帶 's
- sudo chown root:root /etc/cron.d/system_cron