V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Phiiiil
V2EX  ›  程序员

[荐] Gocron-使用 Go 语言开发的轻量级定时任务集中调度和管理系统, 用于替代 Linux -Crontab

  •  
  •   Phiiiil ·
    gaowei-space · 2022-08-21 17:19:03 +08:00 · 2784 次点击
    这是一个创建于 818 天前的主题,其中的信息可能已经有所发展或是发生改变。

    开篇

    今天推荐的软件是由 ouqiang 开源的 Linux Corntab 替代品 Gocron,业务中一直在使用,已稳定运行数年 👍。工作之余依据自己喜好和实际需求进行了部分功能的迭代,包括超级管理员,命令搜索,UI 布局......

    正文

    项目简介

    Gocron-定时任务管理系统,使用 Go 语言开发的轻量级定时任务集中调度和管理系统, 用于替代 Linux-Crontab

    迭代

    v1.6

    • 优化整体界面样式与布局,包括界面色系,列表,详情,按钮组,分页等
    • 调整权限等级,增加超级管理员,可以管理所有任务;管理员调整为管理自己的任务和查看其他任务和日志,普通用户与原有权限一致,仅可查看所有任务和日志
    • 任务详情页增加快捷选择 crontab 按钮组
    • 任务详情页支持更改任务状态
    • 任务列表支持标签,命令搜索

    截图

    列表

    日志

    节点

    webhook

    功能特性

    • Web 界面管理定时任务

    • crontab 时间表达式, 精确到秒

    • 任务执行失败可重试

    • 任务执行超时, 强制结束

    • 任务依赖配置, A 任务完成后再执行 B 任务

    • 账户权限控制

    • 任务类型

      • Shell 任务

        在任务节点上执行 shell 命令, 支持任务同时在多个节点上运行

      • Http 任务

        访问指定的 URL 地址, 由调度器直接执行, 不依赖任务节点

    • 查看任务执行结果日志

    • 任务执行结果通知, 支持邮件、Slack 、Webhook

    了解更多

    👆有需求的小伙伴可以自取噢

    16 条回复    2023-06-15 15:14:38 +08:00
    supersu
        1
    supersu  
       2022-08-21 21:05:08 +08:00 via Android
    支持失败了发送邮件么~
    supersu
        2
    supersu  
       2022-08-21 21:17:01 +08:00
    刚看了一下只支持 mysql ,不知道有没有计划支持一下 sqlite
    zoharSoul
        3
    zoharSoul  
       2022-08-21 21:25:55 +08:00
    对比 xxljob 或者 elasticJob 的优点是什么呀?
    lishoujun
        4
    lishoujun  
       2022-08-21 23:26:59 +08:00
    一看到 go 重写 我就默默去搜了一下 rustcron 习惯了。。。
    Phiiiil
        5
    Phiiiil  
    OP
       2022-08-22 14:13:15 +08:00 via iPhone
    @supersu 支持
    supersu
        6
    supersu  
       2022-08-22 15:23:06 +08:00 via Android
    @Phiiiil 我去看一下哈~
    supersu
        7
    supersu  
       2022-08-22 15:26:38 +08:00 via Android
    @Phiiiil sqlite 这块的配置 wiki 可以补充一下么~
    Phiiiil
        8
    Phiiiil  
    OP
       2022-08-22 22:46:24 +08:00
    @supersu 原作目前支持 MySQL 和 PostgreSQL ,我先看看,你也可以问下原作者是否可以支持哈
    Phiiiil
        9
    Phiiiil  
    OP
       2022-08-22 22:52:52 +08:00
    @zoharSoul 你提到的这两个产品功能更多一些,gocron 相较而言就轻量化些啦,这就得看个人需求了,如果 gocron 足以支持业务需求的话,又何必求大而全呐...
    JohnBull
        10
    JohnBull  
       2022-08-23 09:58:43 +08:00 via Android
    就为了一个每天业务低峰期的跑批……何必呢
    supersu
        11
    supersu  
       2022-08-23 10:14:31 +08:00 via Android
    @Phiiiil 好滴~
    Phiiiil
        12
    Phiiiil  
    OP
       2022-08-23 10:54:18 +08:00
    @nhf0424 当业务有成百上千,又需要开发者维护的时候,一个 web 管理平台就很有需要了
    buaacss
        13
    buaacss  
       2022-08-31 21:45:32 +08:00
    @zoharSoul 我来说说吧。xxljob 是通过数据库锁实现的调度,gocron 这边是通过 grpc 连接。我不喜欢数据库锁的实现,本质上所有通过数据库实现调度的方案都是有状态的。这就需要精心维护状态机,否则就会出现重复调度或者不调度的问题。试想,数据库锁在任务执行后要更新时数据库崩溃了,服务端崩溃了,导致写锁没有被删除;在主库上执行了写锁,但是从库上没读到等等这类的问题其实都是状态机乱掉了。

    而 gocron 通过 grpc 长连接消除了状态,缺点是如果连接断了任务也会跟着中断。我的认知里任务就是应该可以随时被中断,开发应该负责编写出随时能中断后再执行的任务,这样就可以重试直到成功为止。

    不过无状态是双刃剑,gocorn web 端如果崩了,会导致所有运行中的任务都挂掉,这对一些人来说是绝对不可接受的。
    JohnBull
        14
    JohnBull  
       2022-09-14 15:54:49 +08:00 via Android
    @Phiiiil 哈哈,有这种需求的团队,肯定要开发分布式 cron 服务啊
    WordTian
        15
    WordTian  
       2023-02-19 21:03:28 +08:00
    之前用过 Gocron ,但是因为需要 agent 在监听端口,在内网用没问题,在外网用安全风险太大,就放弃了。其实可以加一种节点模式,通过 ssh 连接去执行 shell 脚本
    Joeith
        16
    Joeith  
       2023-06-15 15:14:38 +08:00
    SQLite ,还没支持吗,自用上 MySQL 过了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2612 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 10:48 · PVG 18:48 · LAX 02:48 · JFK 05:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.