最近公司有一个需求是在容器里运行 Cron 服务
Dockerfile
CentOS 上安装 Cron 很简单,一条命令就可以搞定
1 | yum install cronie |
目前的 cronie
版本是 1.4.11
1 | Name : cronie |
直接基于 CentOS7 编写 Dockerfile
1 | FROM centos:7 |
启动命令
Cron 的入口当然是 crond 啦,不过 crond 需要前台运行
1 | crond -n -i -x misc,load |
其中:
-n
进程挂前台
-i
关闭 inotify,因为容器里的 inotify 不生效因此检测不到挂载文件的变更
-x
开启调试信息: misc 可以打印命令的输出,load 可以显示读取了哪些配置,其它配置项见文末参考
配置文件
cron 的配置文件可以在构建镜像的时候打进去,也可以按照需要挂在
挂载为用户服务
1 | docker run -it --rm -v ./foo:/var/spool/cron/foo cron crond -n -x misc,load -i |
foo
文件
1 | SHELL=/bin/bash |
挂载为系统服务
1 | docker run -it --rm -v ./root:/etc/crontab cron crond -n -x misc,load -i |
crontab
文件
1 | SHELL=/bin/bash |
注意 /etc/crontab 和 /var/spool/cron/foo 不一样还有第 6 个参数,即指定运行的用户
参考
参数 | 备注 |
---|---|
ext | 通常和其它几个变量组合使用 |
sch | scheduler |
proc | 进程控制 |
pars | 语法解析 |
load | 读取 |
misc | 杂项 |
test | 测试模式,命令实际不会执行 |
bit | ?? |