Crontinel 是一款针对 Laravel 调度(schedule)与队列(queue)的监控工具,核心目标是捕获那些“进程正常退出但实际未完成工作”的静默失败。它强调“完成不等于做完”(Finished is not the same as done),将进程状态与业务结果分开处理,避免仅凭 HTTP 200 或退出码 0 就误判任务健康。
用途
Crontinel 用于监控后台任务、cron 调度、队列 worker 以及 agent 的运行情况。典型场景包括:部署覆盖了 cron 条目导致调度器停止、worker 进程崩溃但队列管理器仍显示“运行中”、任务退出码为 0 但处理记录数为 0 等。这些情况下,传统监控可能显示绿色,但实际业务已中断。Crontinel 通过接收任务运行后的 HTTP 回执,对比业务规则(如最少记录数),在结果不符合预期时触发告警。
主要能力
- HTTP 回执接收:任何运行时(curl、Node、Python、Sidekiq、GitHub Actions)都可以向 Crontinel 发送相同的 JSON 回执,使用 ingest key 进行认证。
- 进程状态与业务结果分离:进程退出码 0 时状态保持 completed,但业务结果(outcome)由独立规则判断。例如规则要求至少 1 条记录,回执中 processed_records 为 0 则检查失败。
- 缺失计数视为失败:回执中省略计数不会被当作健康,零是真实结果,缺失计数会触发失败。
- Laravel 深度集成:提供 Composer 包,可从调度器附加回执,并上报队列深度和 Horizon 新鲜度。
- Worker 监控:支持按 worker 类型查看状态、暂停检测、队列深度趋势、失败任务率等。
- 告警与恢复:零工作告警和后续恢复均通过邮件发送。后续通过规则的回执会关闭事件。
- 事件包(packet):Cursor、Claude Code 或 Codex 可以读取同一事件,事件包会说明完成不等于业务成功,不会将任务标记为健康。
使用方式
- 在任意运行时中,任务完成后向 Crontinel 发送 HTTP 回执,使用 ingest key(非 MCP key)。示例:curl 或 Node 发送相同 JSON 体。
- 对于 Laravel,安装 Composer 包,从调度器附加回执,并可上报队列深度和 Horizon 新鲜度。
- 设置业务结果规则,例如要求 processed_records 至少为 1。
- 当回执不满足规则时,Crontinel 发送邮件告警;后续通过规则的回执会解决事件。
适用场景
- Laravel 应用的调度任务和队列监控。
- 需要区分“进程完成”与“业务完成”的后台任务。
- 多运行时环境(curl、Node、Python、Sidekiq、GitHub Actions)的统一回执监控。
- 需要监控 worker 状态、队列深度、失败率的团队。
限制
- 当前公开的告警渠道仅为邮件,Slack 和 webhook 尚未在公开页面提供,需等待付费账户支持。
- 付费计划(Starter、Pro、Max)正在筹备中,结账流程和最终使用条款仍在审核。
- 免费起步,无需信用卡。
- 部分语言 SDK(如 npm、PyPI、gem)未提供官方包,仅支持通过 HTTP 发送 JSON。
- 队列深度和 Horizon 新鲜度仅在 Laravel 且上报了该快照时显示。