crony - 分布式定时任务管理平台






1. 基本介绍

1.1 项目背景

项目中存在许多定时任务,很多代码写法都是采取见缝插针式的写法或者直接丢到task服务里面写,存在以下问题

  1. 服务多实例时执行定时任务要考虑抢占锁来争夺定时任务执行权,未抢到锁的任务计算资源被浪费了
  2. 定时任务执行情况和执行时间没有统一管理,需要对应开发者结合代码和日志分析情况,带来很高的维护成本,任务没有按时执行,甚至失败了很久才发现,需要重试或排查

1.2 项目介绍

crony是一个基于etcd和mysql开发的分布式定时任务集中调度和管理平台,支持多节点部署,支持节点任务自动分配和故障转移,支持任务执行失败告警,部署简单,使用方便。

在线预览: http://www.tmnhs.top/

测试用户名:root

测试密码:123456

1.3 系统架构图

详情可见 设计文档

2.功能特性

  • 支持多节点部署,故障转移
  • 支持任务自动分配节点
  • Web界面后台管理定时任务,支持多语言
  • crontab表达式自动生成
  • 任务调度时间粒度支持到秒级别
  • 任务执行失败可重试
  • 用户权限控制
  • 支持shell任务和http回调
  • 查看任务执行日志
  • 任务执行失败告警, 支持邮件、WebHook(提供飞书模板告警)

3.使用说明

3.1 环境要求

  • 安装 etcd3和mysql
  • golang版本 >= v1.16
  • node版本 >= v16.13.0
  • yarn

3.2 安装部署

  • 直接下载二进制可执行文件:release
  • 或者可以源码编译:
#克隆项目
git clone https://github.com/tmnhs/crony.git #进入项目
cd crony #编译前需要修改admin(admin/conf/testing/main.json)和node(node/conf/testing.json)的配置文件
#编译,编译后的可执行文件都在bin/目录下
#或者 ./build.sh
make #使用脚本运行
#脚本语法:./server.sh {start|stop|restart} {admin|node} {testing|production}
#运行后台,默认使用testing配置文件
./server.sh start admin
#运行节点
./server.sh start node

运行后访问地址:http://localhost:8089

4. 技术选型

5. 截图

首页

任务列表

编辑任务

cron表达式生成

用户管理

日志列表

节点管理

服务器状态

邮件和飞书告警模板


6. TODOLIST

  • 解决shell任务自动分配和故障转移的问题,通过预设环境脚本的方法
  • 目前任务只支持单机运行,不支持多机运行

7. 问题

如有问题欢迎加qq:1685290935一起交流讨论

Crony 一个基于Go语言实现的分布式定时任务管理平台的更多相关文章

  1. 部署一个基于python语言的web发布环境

    ---恢复内容开始--- 1) 一门面向对象的语言 2)拥有丰富的库 3)可移植性 4)免费.开源 5)简单易易学 可做软件开发.人工智能.web开发等等 部署流程: Cnetos7.5+Nginx+ ...

  2. Gogs - 基于 Go 语言的自助 Git 服务

    Gogs(Go Git Service) 是一个基于 Go 语言的自助 Git 服务.Gogs 的目标是打造一个最简单.最快速和最轻松的方式搭建自助 Git 服务.使用 Go 语言开发使得 Gogs ...

  3. 基于go语言的心跳响应

    我们在使用tcp ip 通讯的时候,都需要使用心跳机制来判断服务器与客户端的连接状态,如果服务器的心跳超时等,会做出重新连接等机制, 基于这种问题,我今天给大家推荐了一个基于go语言的心跳响应机制,废 ...

  4. Swift:一个基于.NET Core的分布式批处理框架

    Swift是什么 从文章的标题可知:此Swift非Apple那个Swift,只是考虑这个词的含义比较适合. Swift是一个基于.NET Core的分布式批处理框架,支持将作业分割后分发到多台服务器并 ...

  5. oc是一个全动态语言,oc的一切都是基于runtime实现的!

    oc是一个全动态语言,oc的一切都是基于runtime实现的! 从以下三方面来理解runtime吧! 1. 传统的面向过程的语言开发,例如c语言.实现c语言编译器很简单,只要按照语法规则实现一个LAL ...

  6. 概率图模型 基于R语言 这本书中的第一个R语言程序

    概率图模型 基于R语言 这本书中的第一个R语言程序 prior <- c(working =0.99,broken =0.01) likelihood <- rbind(working = ...

  7. 基于Quartz编写一个可复用的分布式调度任务管理WebUI组件

    前提 创业小团队,无论选择任何方案,都优先考虑节省成本.关于分布式定时调度框架,成熟的候选方案有XXL-JOB.Easy Scheduler.Light Task Scheduler和Elastic ...

  8. 基于Java语言开发jt808、jt809技术文章精华索引

    很多技术开发人员喜欢追逐最新的技术,如Node.js, go等语言,这些语言只是解决了某一个方面,如只是擅长异步高并发等等,却在企业管理后台开发方面提供的支持非常不够,造成项目团队技术选项失败,开发后 ...

  9. TomatoLog 是一个基于 .NETCore 平台的产品。

    TomatoLog TomatoLog 是一个基于 .NETCore 平台的产品. The TomatoLog 是一个中间件,包含客户端.服务端,非常容易使用和部署. 客户端实现了ILoggerFac ...

  10. selenium2自动化测试实战--基于Python语言

    自动化测试基础 一. 软件测试分类 1.1 根据项目流程阶段划分软件测试 1.1.1 单元测试 单元测试(或模块测试)是对程序中的单个子程序或具有独立功能的代码段进行测试的过程. 1.1.2 集成测试 ...

随机推荐

  1. sedona(Geospark)读取csv

    package com.grady.sedona import org.apache.sedona.sql.utils.SedonaSQLRegistrator import org.apache.s ...

  2. 【面试题】JS第七种数据类型Symbol详解

    JS第七种数据类型Symbol详解 点击打开视频讲解更加详细 一.什么是Symbol? Symbol是ES6中引入的一种新的基本数据类型,用于表示一个独一无二的值.它是JavaScript中的第 七种 ...

  3. 重新扫描磁盘.bat

    工作需要,需要常常扫描磁盘, 以前是先调用磁盘管理器,然后使用alt+a,再按r,完成对磁盘的扫描 但是速度慢效率低 昨天帮朋友装台式电脑系统的时候,他说要给磁盘分区, 发现磁盘内有卷被占用,无法删除 ...

  4. Openstack Neutron : LBaaS v2

    目录 - LBaaS v2 - 负载均衡概念 - 服务器池 Pool - 监听器 Listener - L7 转发策略 l7 policy - 负载均衡算法 Algorithms - 健康监测 Mon ...

  5. 《Java基础——构造器(构造方法)》

    Java基础--构造器(构造方法)       总结: 1.构造器名应与类名相同,且无返回值. 2."new 方法"的本质就是在调用构造器. 3.构造器的作用--初始化对象的值. ...

  6. 15. Fluentd输入插件:in_tail用法详解

    in_tail输入插件内置于Fluentd中,无需安装. 它允许fluentd从文本文件尾部读取日志事件,其行为类似linux的tail -F命令(按文件名来tail). 这几乎是最常用的一个输入插件 ...

  7. 自定义View6 -塔防小游戏:第三篇防御塔随意放置+多组野怪

    第一篇:一个防御塔+多个野怪(简易版)第二篇:防御塔随意放置第三篇:防御塔随意放置+多组野怪 1.动态addView防御塔 2.防御塔放置后不可以移动 3.弯曲道路 4.素材替换 第四篇:多波野怪 第 ...

  8. 创建SpringMVC工程

    引入依赖 <dependencies> <!-- SpringMVC --> <dependency> <groupId>org.springframe ...

  9. java.lang.ClassNotFoundException:(新建的servlet无法找到class文件)的报错

    该问题有可能是IDEA的部署没有更新的问题 将out中的 删除,然后重新导入即可

  10. 多态特征,instanceof关键字和abstract类

    多态 对象有多种状态.作用:提高程序的可扩展性. 一个对象具备多种状态的能力,这个程序是可扩展的. 前提: 必须有层级关系 继承 实现 继承:子类和父类的关系,一个父类可以有多个子类,说明父类的引用有 ...