V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
这是一个专门讨论 idea 的地方。

每个人的时间,资源是有限的,有的时候你或许能够想到很多 idea,但是由于现实的限制,却并不是所有的 idea 都能够成为现实。

那这个时候,不妨可以把那些 idea 分享出来,启发别人。
marquina
V2EX  ›  奇思妙想

crontab 定时任务的增强管理

  •  
  •   marquina · 2023-01-17 17:51:42 +08:00 · 2772 次点击
    这是一个创建于 681 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

    • 任务手动执行
    • 超时控制 /重试
    • 版本控制
    • 执行历史(日志输出 /耗时)
    • web-UI 管理(如crontab-ui
    • 接入 metrics

    Q: 为啥不用青龙面板?

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

    大家怎么看?

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

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