
willfarrell/crontab一个基于docker的简单包装工具,允许在其他容器中运行复杂的Cron任务。
latest (Dockerfile)
是的,我知道mcuadros/ofelia(280MB),它是本项目的主要灵感来源。这是一个很棒的项目,请勿误解。只是它缺少一些我认为支持Docker发展方向所需的关键企业特性。
update_script.sh等脚本的实际功能。image启动镜像。container在容器中运行命令。project在扩展容器的实例上运行命令。trigger在定时任务完成后触发其他容器中的脚本。name:作业文件名的可读名称,会转换为slug格式。可选。comment:包含在crontab条目中的注释。可选。schedule:Cron调度语法,详见***。例如@hourly、@every 1h30m、* * * * *。必填。command:在crontab容器或Docker容器/镜像中运行的命令。必填。image:Docker镜像名称(例如library/alpine:3.5)。可选。project:Docker Compose/Swarm项目名称。可选,仅在包含container时适用。container:完整容器名称或容器别名(如果设置了project)。如果包含image则忽略此项。可选。dockerargs:Docker run/exec命令行参数,用于完全控制。默认为空字符串。trigger:docker-crontab子集对象数组。子集包含:image、project、container、command、dockerargs。onstart:在crontab容器启动时运行命令,设为true。可选,默认为false。查看config.sample.json获取示例。
json[{ "schedule":"@every 5m", "command": "/usr/sbin/logrotate /etc/logrotate.conf" },{ "comment":"重新生成证书并重新加载nginx", "schedule":"43 6,18 * * *", "command":"sh -c 'dehydrated --cron --out /etc/ssl --domain ${LE_DOMAIN} --challenge dns-01 --hook dehydrated-dns'", "dockerargs":"--env-file /opt/crontab/env/letsencrypt.env -v webapp_nginx_tls_cert:/etc/ssl -v webapp_nginx_acme_challenge:/var/www/.well-known/acme-challenge", "image":"willfarrell/letsencrypt", "trigger":[{ "command":"sh -c '/etc/scripts/make_hpkp ${NGINX_DOMAIN} && /usr/sbin/nginx -t && /usr/sbin/nginx -s reload'", "project":"conduit", "container":"nginx" }], "onstart":true }]
bashdocker build -t crontab . docker run -d \ -v /var/run/docker.sock:/var/run/docker.sock:ro \ -v ./env:/opt/env:ro \ -v /path/to/config/dir:/opt/crontab:rw \ -v /path/to/logs:/var/log/crontab:rw \ crontab
docker network ls查看现有网络docker-compose.yml在my_dir目录中,网络可能为my_dir_defaultconfig.json中添加dockerargs
--network NETWORK_NAME将新容器连接到docker-compose网络--rm --name NAME指定容器名称"dockerargs": "--network my_dir_default --rm --name my-best-cron-job"DockerfileFROM willfarrell/crontab COPY config.json ${HOME_DIR}/
DockerfileFROM willfarrell/crontab RUN apk add --no-cache logrotate RUN echo "*/5 * * * * /usr/sbin/logrotate /etc/logrotate.conf" >> /etc/crontabs/logrotate COPY logrotate.conf /etc/logrotate.conf CMD ["crond", "-f"]
所有stdout输出会被捕获、格式化并保存到/var/log/crontab/jobs.log。设置LOG_FILE为/dev/null可禁用日志。
示例:e6ced859-1563-493b-b1b1-5a190b29e938 2017-06-18T01:27:10+0000 [info] Start Cronjob **map-a-vol** map a volume
grok格式:CRONTABLOG %{DATA:request_id} %{TIMESTAMP_ISO8601:timestamp} \[%{LOGLEVEL:severity}\] %{GREEDYDATA:message}
manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务