crontab 定时任务的增强管理

2023-01-17 17:51:42 +08:00
 marquina

OP 运行了不少 crontab 定时任务,一个痛点是很难主动发现定时任务的异常,往往是等未看到执行成功的结果才知道定时任务跑不起来。

经过一番搜寻,OP 目前发现了两种主动发现定时任务异常的思路:

  1. 定时任务执行成功后上报结果,服务端发现长时间无结果后进行告警,如Cron Job Monitoring - Healthchecks.io。缺点在于需要侵入定时任务代码。
  2. 使用 crontab 自带的 MAILTO 功能,屏蔽 stdout 并重定向 stderr 后,定时任务的异常输出可发送至指定邮箱。缺点在于需要侵入定时任务的输出设置,并且无法对异常进行聚合。

所以 OP 想开发一个工具来管理定时任务。通过识别定时任务的 stderr/exit code ,工具可在 连续 M 次执行失败 /过去 N 分钟未成功执行 之类的场景下发送邮件 /telegram 等告警。这样定时任务就可以不用做啥改动了。

其他一些 OP 没有强烈需求但可能有用的功能:

Q: 为啥不用青龙面板?

A: 青龙面板看起来是单独做了一套执行环节(需要手动指定依赖),而笔者倾向于远程在 linux server 上开发+调试完后用相同的环境运行 crontab ,不然安装 chrome-driver 等比较重的依赖会比较麻烦。

大家怎么看?

2759 次点击
所在节点    奇思妙想
17 条回复
perfectlife
2023-01-17 18:05:59 +08:00
啥时候开发,我 star 一下
f5c4ebc2
2023-01-17 19:42:31 +08:00
感觉这个想法挺好的,我也有类似的需求,但目前碰到的情况基本都可以通过 OP 提到的第一种方法解决,代码侵入性问题可以通过类似装饰器的方法在一定程度上解决。

另一种现成的方法是用云函数,设置一下自动告警的规则就可以了,比较灵活方便。
37Y37
2023-01-17 20:04:43 +08:00
我做过类似的,功能更强大,跑下来也比较稳定,看看是不是有参考的价值 https://blog.ops-coffee.cn/s/yjftypchd03ftglv_jsqww
chuanqirenwu
2023-01-17 21:07:30 +08:00
无侵入式的实现方案有了吗?
815979670
2023-01-18 01:27:32 +08:00
@37Y37 我有个类似的想法构思,看你的文章挺有参考价值的。
我想尝试 sqlite + 单个主程序的方式 用一个小而美的形态来实现这个
ft3312591
2023-01-18 09:56:22 +08:00
有没有纯粹一点只有 crontab 远程执行的东西,我只想把所有脚本都统一放在一起,管理方便
marquina
2023-01-18 10:29:33 +08:00
@ft3312591 控制其它服务器上的 crontab ?
marquina
2023-01-18 10:30:45 +08:00
@37Y37 这个看起来是企业级解决方案?对于个人 crontab 使用场景来说可能有点太重了😂
marquina
2023-01-18 10:31:07 +08:00
@chuanqirenwu 没呢,所以准备做一个
chuanqirenwu
2023-01-18 17:33:28 +08:00
@marquina 方案都没有怎么实现呀?我最近也在做类似的东西,仿照的 healthchecks.io 的做法,不知道无侵入式应该怎么实现呢?
marquina
2023-01-18 18:32:17 +08:00
@chuanqirenwu 技术细节的话帖子里说了一部分。新流程下该工具会充当 crontab 和执行命令的中间层,工具执行完命令后会检查 stderr 和 exit code ,判断是否成功。
chuanqirenwu
2023-01-18 20:19:15 +08:00
哦哦,那就类似于 ansible 或者 AWX 了,需要自己集成调度器。
julyclyde
2023-01-19 09:40:24 +08:00
yet another
marquina
2023-01-19 19:42:46 +08:00
@julyclyde 啥意思
ft3312591
2023-01-21 11:03:13 +08:00
@marquina 不是控制,就是定时在一台机器上,定时远程 ssh 去执行脚本,有没有这种管理 web 系统?
marquina
2023-01-30 00:02:59 +08:00
#15 @ft3312591 https://github.com/ouqiang/gocron 采用中控节点+执行节点的架构设计,应该是能满足你的需求的
marquina
2023-01-30 00:03:40 +08:00
发现开源项目 ouqiang/gocron ,整体比较重,但从功能上来说基本满足我的需求了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/909542

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX