我想知道如何在 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。文件不得包含破折号,只能包含下划线
- 须藤 vi /etc/cron.d/system_cron
- '* * * * *' root /bin/touch /projectdir/system_cron.d_works # 不带 's
- sudo chown root:root /etc/cron.d/system_cron