最近我做了一个轻量级的定时任务平台,名字叫 **ChronoFlow**。 它的定位很简单给内网单团队使用的轻量级任务调度系统。如果你只是想管理几十个定时任务不想上太重的平台又希望有 Web 页面、执行日志、手动运行、Cron 配置、任务终止、Docker 部署这些能力那么 ChronoFlow 可能会比较适合。项目地址https://github.com/Honghuaijie/chronoFlow为什么做这个项目在很多中小型团队或者个人项目里经常会有一些定时任务需求比如每隔几分钟同步一次数据每天凌晨跑统计脚本定时清理临时数据定时调用 Python 脚本生成报表手动触发某个后台任务查看任务执行日志和失败原因这些需求一开始可能直接写在 Linux crontab 里。但任务一多问题就来了不方便查看有哪些任务不方便手动运行不方便看执行日志任务失败了不直观多台机器执行脚本不好管理想终止正在运行的任务比较麻烦非运维同学不方便操作所以我做了 ChronoFlow希望它足够轻量但又能覆盖日常任务调度的大部分场景。ChronoFlow 是什么ChronoFlow 主要由三个部分组成UI - Admin - Exec ^ | | v -- callbackchronoFlow-ui调度中心前端页面chronoFlow-admin调度器后端负责任务、执行器、日志、调度逻辑chronoFlow-exec执行器后端负责真正执行 Shell 脚本其中只有 Admin 连接 MySQLExec 不连接数据库。Exec 执行完任务后会通过 callback 回调 Admin把执行结果、退出码、日志信息写回来。目前支持的功能ChronoFlow 第一版主要支持这些功能。1. 执行器管理可以在页面中新增、编辑、删除执行器。执行器会有在线/离线状态Admin 会定期检查执行器健康状态。如果 Admin 和 Exec 都在 Docker Compose 里部署执行器地址可以填写http://chronoflow-exec:100042. 任务管理支持创建任务、编辑任务、删除任务、启动调度、停止调度、手动运行。任务可以绑定到某一个执行器上。同一个任务默认不允许并发运行避免同一个脚本重复执行导致数据问题。新增任务时可以选择执行器、配置 Cron 表达式、设置超时时间和任务说明。3. Cron 可视化配置页面提供了 Cron 配置弹窗支持常见的分钟、小时、日、周、月配置也支持手动输入 Cron 表达式。同时会展示接下来几次运行时间方便确认表达式是否符合预期。4. Glue Shell每个任务可以维护一段 Glue Shell 脚本。例如#!/bin/bashset-eechohello chronoflowechorun time:$(date%Y-%m-%d %H:%M:%S)python3--versionechodone如果你的脚本比较复杂也可以把 Python 文件挂载到执行器容器里然后在 Glue Shell 里调用python3 /scripts/report.py5. 异步执行和回调Admin 下发任务后不会一直阻塞等待结果。Exec 会异步执行脚本执行完成后回调 Admin。如果 Admin 临时重启或不可用Exec 会把待回调结果临时落盘后续继续重试。6. 任务终止对于长时间运行的任务可以在页面上点击终止。Exec 会尽量终止整个进程组而不是只 kill 主进程。这对 Shell 脚本里再启动 Python、子进程的场景比较重要。7. 执行日志MySQL 只保存日志元数据完整日志正文保存到文件里。这样可以避免把大量 stdout/stderr 直接塞进 MySQL后续日志增长也更好处理。日志里可以看到执行状态开始时间结束时间执行耗时exit code错误信息Glue 快照文件日志内容8. 运行报表目前也做了一个简单的运行报表页面可以看到任务数量调度次数执行器数量最近执行成功/失败比例近 7 天执行趋势部署方式ChronoFlow 支持两种 Docker 部署方式。源码构建部署适合开发者自己修改代码后构建gitclone https://github.com/Honghuaijie/chronoFlow.git chronoflowcdchronoflow/deploycp.env.example .envdockercompose-fdocker-compose.mysql.yml up-ddockercompose up-d--build作者镜像部署如果服务器空间比较小不想拉完整源码可以只复制deploy目录然后使用已经发布的镜像CHRONOFLOW_ADMIN_IMAGEghcr.io/honghuaijie/chronoflow-admin:v0.1.2 CHRONOFLOW_EXEC_IMAGEghcr.io/honghuaijie/chronoflow-exec:v0.1.2 CHRONOFLOW_UI_IMAGEghcr.io/honghuaijie/chronoflow-ui:latest启动dockercompose-fdocker-compose.image.yml up-d默认访问地址http://127.0.0.1:5173默认账号admin / admin123生产环境需要修改默认密码、JWT Secret、Callback Token、执行器 Token 和数据库密码。技术栈后端主要使用 Go。整体结构分为API 层Service 层Biz 层Data 层Worker / SchedulerExecutor ClientLog Store前端是一个 Web 调度中心主要面向 PC 页面不追求移动端复杂适配。部署使用 Docker ComposeMySQL 单独拆成一个 compose 文件避免频繁构建业务镜像时影响数据库容器。适合什么场景ChronoFlow 当前更适合内网环境单团队使用几十个以内任务单调度器Shell / Python 脚本调度希望轻量部署希望有 Web 页面和日志查看它暂时不定位为大规模分布式任务调度平台也不追求复杂的多租户、权限体系和海量任务调度能力。第一版的一些取舍第一版我做了一些偏轻量的选择单调度器MySQL 保存元数据日志正文保存文件Exec 不连接数据库全局 callback token同一个任务不允许并发运行Linux 优先任务终止基于进程组Docker 部署优先这些选择不是为了“做少”而是希望系统更容易部署、理解和维护。当前状态目前 ChronoFlow 第一版已经完成了核心功能并且已经做过本地和线上 Docker 部署验证。线上验证过的链路包括UI - Admin - Exec - Glue Shell - Callback - 执行日志也就是说从页面创建任务、手动运行、执行器执行脚本、回调结果、查看日志这条主链路已经跑通。后续计划后续可能会继续优化这些方向添加任务失败提醒更完善的部署文档更好的日志降噪更细的报表统计更友好的 Cron 配置体验更多执行器运行环境示例GitHub Release 和镜像版本管理更完善的错误提示总结ChronoFlow 是我做的一个轻量级定时任务平台目标不是替代大型调度系统而是解决一些更日常、更直接的内网任务调度问题。如果你也有类似需求比如想把 crontab、Shell 脚本、Python 脚本统一放到一个 Web 平台里管理可以试试这个项目。项目地址https://github.com/Honghuaijie/chronoFlow欢迎体验、反馈和交流。