服务中有很多数据是定时任务计算出来的,定时任务运行是会有很多异常情况导致任务异常退出。
本想程序中增加异常捕获,在最外层加上 try catch,然后通过 微信或者邮件发出通知告警。 但有些情况监控不了:
- 进程被其他人 kill,内存不足被系统强杀
- 运行节点断网或者停机(这个其实可以监控节点状态)
task and job
设想有个定时任务的框架,每个定时程序作为一个 task,每次运行是一个 job。 有个统一的服务可以收集到 task 的运行状态,每个 job 运行的详情。
这样可以监控:
- 如果一个 task 长时间没有 job,则报警
- 如果一个 job 运行时间过久 报警
想到有两种实现方式:
- 托管方式,有用过 jenkins,但是感觉太重了,不适合这样的定时任务。现状是有多个人写了脚本,定时执行,并且在不同机器上,对配置要求不一样
- 脚本侵入式,可以避免上面需要搭建平台服务,并且可以服用原来的资源分配。缺点是需要修改原来所有的脚本,所以是想该的简单些。类似的暴露三个接口:init(task_info ), run(argv), uninit()
- 托管方式的不知道是不是有类似 jenkins,但是轻量点适合定时任务的
- 侵入式的,就有些开发工作量了。需要搭建服务,做定时检查报警这些工作了。不知道有没有现成的轮子。