在《轻量的定时任务工具 Cronicle:前篇》这篇文章中,我们聊过如何通过容器封装 Cronicle 这个已经迭代了七年之久的轻量计划任务工具。
本篇文章中,我们来聊聊如何将它和 Docker 以及 Traefik 一起搭配使用。
写在前面
Cronicle 是一款很棒的工具,在上一篇公开的分享中,我有提到过它的各种功能,以及核心的优点:简单小巧、但不失完善功能,以及良好的体验。
在之前的文章中,使用它需要分别执行初始化和运行,在最近的文章中,除了将它升级到最新的版本之外,我也将这两个步骤进行了合并,与此同时也添加了 Traefik 的使用示例。
当然, 它也有许多软件有的问题:
- 在当前云原生时代,软件功能架构稍显落后。
- 由于第一点,许多社区的功能支持上能力、效率比较低:比如秒级任务支持、多语言支持、容器化支持。
在去年年中的时候,作者曾经下定决定将软件发展方向转向从零开始的 “v2” 版本,但在运作半年不到的过程中,发现 “All-in” 并不是一个最优解,于是,又将船头调转了回来,目前在缓慢的同时迭代 “v1” 和 “v2” 版本的软件。
如果你不介意使用英文界面,不需要秒级执行的任务,那么 Cronicle 对于你而言一定是一个不错的选择,尤其是当我们解决了 Docker 支持之后(技术细节见上一篇文章)。
完整的代码,我开源在了这里:https://github.com/soulteary/docker-cronicle,可以自取。
使用容器部署 Cronicle
在分享使用之前,我们先来了解如何使用 Docker “一键”安装、部署 Cronicle。
直接使用 Docker 完成 Cronicle 的部署
如果你没有使用过 Cronicle ,可以通过下面的命令一键启动一个属于你的计划任务工具:
代码语言:shell复制docker run
-v /etc/localtime:/etc/localtime:ro
-v /etc/timezone:/etc/timezone:ro
-v `pwd`/data/data:/opt/cronicle/data:rw
-v `pwd`/data/logs:/opt/cronicle/logs:rw
-v `pwd`/data/plugins:/opt/cronicle/plugins:rw
-p 3012:3012 -d
--hostname cronicle
--name cronicle
soulteary/cronicle当程序运行完毕,我们打开浏览器,访问 http://localhost:3012,将看的程序的登录界面:
Cronicle 登录界面在登录界面分别输入默认用户名 admin 和密码 admin,就打开了工具的默认控制面板,包含了程序的运行基础状态的概览。
Cronicle 运行概览通过 Docker Compose 部署 Cronicle
使用 Docker Compose 启动 Cronicle 也非常简单,我们先将下面的内容保存为 docker-compose.yml:
version: "3"
services:
cronicle:
image: soulteary/cronicle:0.9.16
restart: always
hostname: cronicle
ports:
- 3012:3012
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
- ./data/data:/opt/cronicle/data
- ./data/logs:/opt/cronicle/logs
- ./data/plugins:/opt/cronicle/plugins
extra_hosts:
- "cronicle.lab.io:0.0.0.0"
environment:
- TZ=Asia/Shanghai
healthcheck:
test: ["CMD-SHELL", "wget --no-verbose --tries=1 --spider localhost:3012/api/app/ping || exit 1"]
interval: 5s
timeout: 1s
retries: 3
logging:
driver: "json-file"
options:
max-size: "10m"接着使用 docker-compose up -d 启动程序即可,使用操作和 Docker 启动方式没有区别。因为我们将命令都使用配置文件(代码)的方式进行了显式声明,在可维护性上来说,会好不少。
让 Cronicle 和 Traefik 搭配使用
想要让 Cronicle 和 Traefik 一同使用,我们需要对上文中的 Compose 配置进行一些微调:
代码语言:yaml复制version: "3"
services:
cronicle:
image: soulteary/cronicle:0.9.16
restart: always
expose:
- 3012
labels:
- "traefik.enable=true"
- "traefik.docker.network=traefik"
# - "traefik.http.routers.cronicle-web.middlewares=redir-https@file"
- "traefik.http.routers.cronicle-web.entrypoints=http"
- "traefik.http.routers.cronicle-web.rule=Host(`cronicle.lab.io`)"
- "traefik.http.routers.cronicle-ssl.tls=true"
# - "traefik.http.routers.cronicle-ssl.middlewares=gzip@file"
- "traefik.http.routers.cronicle-ssl.entrypoints=https"
- "traefik.http.routers.cronicle-ssl.rule=Host(`cronicle.lab.io`)"
- "traefik.http.services.cronicle-backend.loadbalancer.server.scheme=http"
- "traefik.http.services.cronicle-backend.loadbalancer.server.port=3012"
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
- ./data/data:/opt/cronicle/data
- ./data/logs:/opt/cronicle/logs
- ./data/plugins:/opt/cronicle/plugins
extra_hosts:
- "cronicle.lab.io:0.0.0.0"
environment:
- TZ=Asia/Shanghai
- HOSTNAME=cronicle.lab.io
- CRONICLE_foreground=1
- CRONICLE_echo=1
- CRONICLE_base_app_url=http://cronicle.lab.io:3012
- CRONICLE_web_socket_use_hostnames=1
- CRONICLE_server_comm_use_hostnames=1
- CRONICLE_WebServer__http_port=3012
- CRONICLE_WebServer__http_bind_address=0.0.0.0
- CRONICLE_WebServer__https=0
- CRONICLE_web_direct_connect=0
healthcheck:
test: ["CMD-SHELL", "wget --no-verbose --tries=1 --spider localhost:3012/api/app/ping || exit 1"]
interval: 5s
timeout: 1s
retries: 3
logging:
driver: "json-file"
options:
max-size: "10m"
networks:
- traefik
networks:
traefik:
external: true将上面的内容保存为 docker-compose.yml,使用 docker-compose up -d 启动服务,然后访问我们在配置中定义的域名 cronicle.lab.io 就能够看到应用的 Web UI 啦。
使用 Cronicle 实现一个简单的监控
在完成基础搭建之后,我们来通过 Cronicle 实现一个最常见的计划任务的场景来演示基础使用。
新建周期性任务
Cronicle 创建任务点击界面上的 “Schedule” 标签,打开计划任务页面,点击“Add Event..”按钮,将来到创建任务的页面。
Cronicle 添加一个周期性调用 HTTP 请求的任务我们添加一个周期性调用 HTTP 请求的任务,在调用地址中填入我们要检测的页面地址,比如我在这里填写了国民级检测网络连接的服务:百度。
Cronicle 设置任务调用频率关于频率设置,Cronicle 的选项比较丰富,我们可以根据自己的实际需求来设置。
Cronicle 设置通知和串行任务在完成基础设置和触发频率后,我们需要根据自己的具体需要来设置通知方式和执行成功、执行失败后的下一步动作。我目前选择和常用的 IM 或者自己在用的推送系统联动,所以先不进行额外设置,在下文中我们会翻回来完成最后的设置。
Cronicle 完成任务创建保存任务后,我们再次访问 Cronicle 的控制面板,将看到大量在未来时刻会运行的任务。(未来的运行计划列表)
Cronicle 任务列表接下来,我们来了解触发式的任务如何配置。
使用触发式任务完成结果通知
Cronicle 创建一个触发式的任务创建触发式任务,只需要把 “Event Enabled” 关闭即可。其余内容和配置周期性任务没有太大差别,在任务内容上,我们既可以选择 HTTP 调用,又可以选择 Script 调用,还可以采用编写插件来完成我们所需要的任务。
Cronicle 更新任务串行配置在完成触发式任务的配置后,我们调整上文中周期执行任务的 “Chain Reaction”,比如,当任务执行失败的时候,主动调用这个“触发式任务”,来联动我们的 IM 或者推送服务,告诉我们有程序出现了问题。
验证配置好的定时任务
Cronicle 触发任务进行测试在保存任务之后,我们可以等待周期性任务自动执行,也可以手动触发任务,来验证任务执行是否符合预期。
如果想验证失败的场景,最简单的方式是将我们要检测的域名地址改成一个天然“Not Found” 的记录,随便在域名中添加点字符内容,选择一个不存在的域名地址。
如果你在上一步中完成了有效的通知配置,那么在这一步,你将会收到告警通知信息。
关于 Cronicle 的项目维护插曲
去年七月的时候,Cronicle 作者在项目首页添加了一条有趣的公告内容,声称团队因为没有人力,以及希望能够通过完整重写项目来完成社区内积累的用户需求反馈。
出于一些原因,在去年年末,Cronicle 的作者将 “项目处于维护期间,将不再接受 Pull Request,将专注新版本 Orchestra 开发”的文档内容移除掉了。自此,Cronicle 原始项目恢复了正常的日常维护和更新。
这一通折腾之下,Cronicle 的用户应该流失了不少,其他开源社区或许需要引以为戒。
最后
希望这篇文章,能够帮助你重新认识 Cronicle 这款优秀的软件,以及节约不必要的折腾时间。
我们下一篇文章再见。
--EOF
本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载、或重新修改使用,但需要注明来源。 署名 4.0 国际 (CC BY 4.0)
本文作者: 苏洋
创建时间: 2022年11月17日
统计字数: 6020字
阅读时间: 13分钟阅读
本文链接: https://soulteary.com/2022/11/17/use-docker-and-traefik-to-build-a-lightweight-and-beautiful-scheduled-task-tool.html


