替代crontab,统一定时任务管理系统cronsun简介

摘 要

cronsun 是一个分布式任务系统,单个节点和 Linux 机器上的 crontab 近似。是为了解决多台 Linux  机器上 crontab 任务管理不方便的问题,同时提供任务高可用的支持(当某个节点死机的时候可以自动调度到正常的节点执行)。支持界面管理机器上的任务,支持任务失败邮件提醒,安装简单,使用方便,是替换 crontab 一个不错的选择。

替代crontab,统一定时任务管理系统cronsun简介

 

一、背景

crontab是Linux系统里面最简单易用的定时任务管理工具,相信绝大多数开发和运维都用到过。在咱们公司,很多业务系统的定时任务都是通过crontab来定义的,时间长了后会发现存在很多问题:

  • 大量的crontab任务散布在各台服务器,带来了很高的维护成本
  • 任务没有按时执行,甚至失败了很久才发现,需要重试或排查
  • crontab分散在很多集群上,需要一台一台去看日志分析,头都大了
  • crontab存在单点问题,对于不能重复执行的定时任务很伤脑筋
  • 我X,crontab 被误删了,没备份?尼玛!
  • 我Q,服务器要迁移,crontab上的历史任务都是什么鬼?问了一圈居然都不知道
  • ...

因此,我们非常需要一个集中管理定时任务系统,相信这也是的饱受crontab煎熬的运维或开发的心声。

二、选择

我们部门的开发人力一直都非常紧张,所以靠自己开发一套完善的定时任务管理系统不太现实。因此,希望找一个开源的系统来快速满足需求。

期间,我在网上看了不少相关文章,比如 http://ju.outofmemory.cn/entry/221885

发现这些系统对于我们的实际场景来说都过于臃肿,不太合适。偶然在github找了一个基于Go语言开源的定时任务集中管理系统—gocron,发现非常轻量,于是试用了一段时间。

不过最终我还是放弃了,因为gocron存在单点问题,项目地址:https://github.com/ouqiang/gocron

期间和作者有过一段时间的交流,提了不少改善建议,在和gocron作者交流期间,他针对我提到的单点问题,推荐了另一个开源项目:cronsun,也就是本文介绍的主角,通过试用,发现非常契合我们当前的使用场景,介绍如下:

cronsun 是一个分布式任务系统,单个节点和 Linux 机器上的 crontab 近似。是为了解决多台 Linux  机器上 crontab 任务管理不方便的问题,同时提供任务高可用的支持(当某个节点死机的时候可以自动调度到正常的节点执行)。支持界面管理机器上的任务,支持任务失败邮件提醒,安装简单,使用方便,是替换 crontab 一个不错的选择。

Github地址:https://github.com/shunfei/cronsun

cronsun的部署架构如下:替代crontab,统一定时任务管理系统cronsun简介

三、部署

本文主要介绍功能,这里就简单写下关键步骤:

1、安装MongoDB,强烈建议使用集群模式

2、安装Etcd3,强烈建议使用集群模式

3、部署cronsun

①、下载cronsun:https://github.com/shunfei/cronsun

②、解压后修改conf目录下的配置文件:db.json 和 etcd.json,分别修改MongoDB和etcd的实际地址。

③、启动web:./cronweb -conf conf/base.json (若要后台运行则使用nohup)

④、启动node:./cronnode -conf conf/base.json (若要后台运行则使用nohup)

⑤、访问前台:http://x.x.x.x:7079/ui/

4、部署鉴权组件aProxy,cronsun在鉴权方面做的非常粗糙,所以这里用到了cronsun团队开发的aProxy鉴权组件,实现的原理为基于Go语言,反向代理了后端WEB,从而实现域名和页面地址的访问控制,介绍地址:https://www.cnblogs.com/QLeelulu/p/aproxy.html

我们这边是要用到生产环境,所以在部署上会着重考虑到可用性和可靠性,这里贴一下我们这边的部署架构图,供参考:
替代crontab,统一定时任务管理系统cronsun简介

这里,Etcd和MongoDB复用了5台服务器(后续会继续复用其他公共组件),其中MongoDB采用分片+副本集的模式。

四、功能

部署完成后,访问前台就能看到UI比较简陋cronsun管理WEB了:
替代crontab,统一定时任务管理系统cronsun简介

Ps:右上方选择熟悉的语言之后,基本就可以按照页面标签进行任务添加操作了。

1、添加节点

cronsun基于etcd实现了自动发现和注册的功能,所以添加节点非常简单,直接将cronnode和conf拷贝到客户端服务器启动之后,就能在前台->节点页面看到该服务器了,当然节点和Etcd以及MongoDB之间的网络必须畅通。替代crontab,统一定时任务管理系统cronsun简介

2、节点分组

添加了所需的节点服务器之后,我们可以将节点进行分组,从而方便定时任务的添加:替代crontab,统一定时任务管理系统cronsun简介

3、添加任务

节点和分组都搞定之后,我们就可以开始添加定时任务了。定时任务填写的信息略微复杂,不过按照提示还是可以轻松搞定的:替代crontab,统一定时任务管理系统cronsun简介

上图我简单的标注了一些需要特别说明的地方,其他的选项大家看中文描述都能自行搞定。当然,还有一点要说明的是,任务脚本必须要有执行权限,否则任务会执行失败。

4、任务列表

添加完成任务之后,在任务标签页就能看到所有添加的定时任务以及执行情况了,这里可以使用分组过滤或节点过滤来筛选关心的任务。替代crontab,统一定时任务管理系统cronsun简介

每一个任务的右侧有3个小按钮:

①、成功/失败:显示最近一个任务的执行是成功还是失败,点击后可以查看到任务详情,包括任务输出数据:替代crontab,统一定时任务管理系统cronsun简介

②、latest按钮:点击后查看改任务的近期执行情况

③、刷新符号按钮:点击后可以弹出立即执行功能,方便调试任务替代crontab,统一定时任务管理系统cronsun简介

五、小结

通过一段时间的灰度试用,可以确定cronsun在中小型规模场景下,是crontab的一个比较好的替代品,它能够帮助运维人员脱离crontab难管理、难运维的苦海。

当然,作为一款开源产品,cronsun很多功能细节还有很大的提升空间,目前我也和cronsun团队长期保持联系,将生产环境使用过程中遇到的一些问题和建议一一反馈,相信这款产品能够继续打磨优化,更加完善、完美。

发表评论

gravatar

:?::razz::sad::evil::!::smile::oops::grin::eek::shock::???::cool::lol::mad::twisted::roll::wink::idea::arrow::neutral::cry::mrgreen:

刷新评论

目前评论:29   其中:访客  25   博主  4

  1. 龙笑天 5 来自天朝的朋友 火狐浏览器 Windows 7 广东省深圳市 天威视讯

    刚接触linux,感觉crontab还是挺好用的 :mrgreen:

    • 张戈 [博主] 来自天朝的朋友 QQ浏览器 Mac OS X 10_11_3 广东省深圳市 电信

      单机没问题,来个几百台几千台,你就苦逼了。

      • 龙笑天 5 来自天朝的朋友 火狐浏览器 Windows 7 广东省深圳市 天威视讯

        :shock: 那也太恐怖了吧…. PS:网站备案真蛋疼…

        • 米扑 3 来自天朝的朋友 谷歌浏览器 Mac OS X 10_12_6 北京市 电信CDMA

          哈哈 企业备案更蛋疼
          今年初我的域名(mimvp.com)企业备案23天,
          不仅严重影响了生意收入,还严重影响了PR值、网站权重、企业信誉等一系列问题
          当然,很多初创企业,去年底和今年初都面临过你今天的同样问题

          • 龙笑天 5 来自天朝的朋友 火狐浏览器 Windows 7 广东省深圳市 天威视讯

            :???: 希望下周能OK,已经等了一周了~~

            • 张戈 [博主] 来自天朝的朋友 QQ浏览器 Windows 7 广东省广州市 电信

              可以做点手脚,不关站备案啊。。
              https://zhangge.net/5017.html
              另外,我之前从阿里云转腾讯云的时候,只把www的域名给弄了一个临时页面,就备案过了,zhangge.net照样放开访问,没问题的。。。管局和审核只看www域名。。。当然如果你是www的作为主站,那么就得看看这篇文章了。。。

              • 龙笑天 5 来自天朝的朋友 火狐浏览器 Windows 7 广东省深圳市 天威视讯

                看到的晚了… :sad: 不过下次就用这个试试了~ :mrgreen:

              • 米扑 3 来自天朝的朋友 谷歌浏览器 Mac OS X 10_12_6 北京市 电信

                这种方法不行了吧,文章是2015年的
                mimvp.com 开始是我在阿里云的个人备案
                后转企业备案时,阿里云把域名给屏蔽了,无法访问
                没办法,临时切换到了另一个人域名 mimvp.cn 让客户继续访问
                近一个月企业备案完毕后,再又切回了 mimvp.com 阿里云才让访问,PR早没了

                • 西枫里人 1 来自天朝的朋友 搜狗浏览器 Windows 7 上海市 联通

                  站长平台点下闭站保护

          • yigehaobb 1 来自天朝的朋友 谷歌浏览器 Windows 10 山东省威海市 联通

            这个代理也可以备案通过??真牛啊

  2. 米扑 3 来自天朝的朋友 谷歌浏览器 Mac OS X 10_12_6 北京市 电信CDMA

    发现作者居然还是个高中毕业,感叹果然大神无处不在! 高手在民间
    服务器集群,会考虑试试 cronsun 维护米扑的几十台云服务器 :oops:

    • 张戈 [博主] 来自天朝的朋友 QQ浏览器 Windows 7 广东省广州市 电信

      完全可以的

  3. 技术宅 4 来自天朝的朋友 火狐浏览器 Windows 10 江苏省南京市 电信

    又学到了,感谢大大!

  4. 成航先森 5 来自天朝的朋友 谷歌浏览器 Windows 7 四川省成都市 电信

    可惜我们的服务器特别的分散,隶属不通客户,使用到的机会不是很大。

  5. 楚狂人博客 1 来自天朝的朋友 谷歌浏览器 Windows 7 山东省潍坊市 联通

    博主的每一篇文章都有干货,值得学习

  6. 沈唁志 1 来自天朝的朋友 谷歌浏览器 Windows 10 陕西省西安市 电信

    张戈大神的文章值得一看

  7. 智能软件 0 来自天朝的朋友 谷歌浏览器 Windows 10 广东省深圳市 联通

    太实用了,已收藏签到成功! :razz:

  8. php小白 1 来自天朝的朋友 谷歌浏览器 Windows 10 北京市 联通

    怎么添加节点呢

  9. 历史趣谈 1 来自天朝的朋友 谷歌浏览器 Linux 福建省三明市 联通

    改天抽空折腾折腾这个软件

  10. 李洋博客 0 来自天朝的朋友 搜狗浏览器 Windows 7 辽宁省沈阳市 电信

    我是真的看不懂,不过这并不耽误我评论。

  11. 夏木鱼 0 来自天朝的朋友 谷歌浏览器 Windows 7 广东省广州市萝岗区 电信

    溜达溜达,博主不错

  12. 重庆SEO 0 来自天朝的朋友 谷歌浏览器 Windows 7 重庆市 联通

    老板,你不更新文章我们过来没东西可学啊。之前的文章看了好多。

  13. 小阿余 1 来自天朝的朋友 谷歌浏览器 Mac OS X 10_12_6 安徽省马鞍山市 电信

    怎么看最新的文章啊…

  14. 楚狂人博客 1 来自天朝的朋友 谷歌浏览器 Windows 7 山东省潍坊市 联通

    博主更新不错,但是干货不少

  15. 伤心的笔 0 来自天朝的朋友 谷歌浏览器 Windows 10 山东省 移动

    喜欢用systemd的一套工具,包含了timer,感觉比crontab优雅

    • 张戈 [博主] 来自天朝的朋友 QQ浏览器 Windows 7 广东省广州市 电信

      嗯,有空学习下

  16. Song 1 来自天朝的朋友 谷歌浏览器 Windows 7 广西 电信

    大佬,你的文章怎么写的啊,红色的标题线,绿色的文本框等是怎么弄的呢?小白想要学习一下,谢谢!

  17. 泪雪博客 2 来自天朝的朋友 谷歌浏览器 Windows 10 四川省成都市 电信

    定时任务真的是个好东西,这两天折腾了一下WordPress的计划任务,可以说是非常的爽啊

  18. 电脑 1 来自天朝的朋友 谷歌浏览器 Windows 7 内蒙古兴安盟 移动

    分享的很好 学习了过来

加载中,请稍候...