OP 运行了不少 crontab 定时任务,一个痛点是很难主动发现定时任务的异常,往往是等未看到执行成功的结果才知道定时任务跑不起来。
经过一番搜寻,OP 目前发现了两种主动发现定时任务异常的思路:
- 定时任务执行成功后上报结果,服务端发现长时间无结果后进行告警,如Cron Job Monitoring - Healthchecks.io。缺点在于需要侵入定时任务代码。
- 使用 crontab 自带的 MAILTO 功能,屏蔽 stdout 并重定向 stderr 后,定时任务的异常输出可发送至指定邮箱。缺点在于需要侵入定时任务的输出设置,并且无法对异常进行聚合。
所以 OP 想开发一个工具来管理定时任务。通过识别定时任务的 stderr/exit code ,工具可在 连续 M 次执行失败 /过去 N 分钟未成功执行 之类的场景下发送邮件 /telegram 等告警。这样定时任务就可以不用做啥改动了。
其他一些 OP 没有强烈需求但可能有用的功能:
- 任务手动执行
- 超时控制 /重试
- 版本控制
- 执行历史(日志输出 /耗时)
- web-UI 管理(如crontab-ui)
- 接入 metrics
Q: 为啥不用青龙面板?
A: 青龙面板看起来是单独做了一套执行环节(需要手动指定依赖),而笔者倾向于远程在 linux server 上开发+调试完后用相同的环境运行 crontab ,不然安装 chrome-driver 等比较重的依赖会比较麻烦。
大家怎么看?