Gosuv是一个进程管理工具,使用Go语言编写。受python-supervisor启发,学习了很多其中的功能和用法。
至于为什么要写一个go的进程管理工具,主要还是因为感觉python-supervisor不是很好用(毕竟我也用了这玩意好几年了,又爱又恨)。
有哪些地方我感觉不好呢?
输出的日志不能包含ansi的颜色信息,在终端环境下,带颜色的日志非常常见网页端不能新增配置文件,只能在控制台增加supervisorctlreload这个命令会导致supervisord的重启,以至于他管理的其他程序也会跟着死掉状态从运行中转化到FATAL状态,无法设置通知没有进程的性能监控的界面程序运行的时候一些基础的环境变量缺少,比如HOME,USER变量如果不设计killasgroup=true,默认的进程通常不能全部杀掉还有很多,等我想起来我再补充可能上面的很多抱怨supervisor做一些调整,或者增加一些插件也是可以实现的,不过用起来很麻烦,而我又比较懒。看到supervisor官网上一堆堆的issue但是也没有人解决,想来我会Go语言,为什么不自己写一个进程管理工具呢,于是在一天晚上开搞了。
从状态机开始研究,接着有增加了web界面,后来越来越完善了。相对于之前的python-supervisor做了以下的改善
Web控制台部分做了重点加强,因为使用频率太高了,在网页上现在可以直接添加先的应用,网页查看日志的部分也做了优化,查看起来没有这么费劲了。使用了websocket连接后端,状态一有变化,前台就能立刻看到变化。reload命令不在是重启的命令,而是重新读取配置文件,并应用已经更改的那部分。日志部分对于带有ansicolor的输出,再也不会报XMLRPC错误了,这个只有用python的xmlrpc库才会出这个问题,用Go语言写自然不会有这个问题。配置文件也被我全部换成yaml格式的了,修改起来方便很多。所以的配置全部都放在了一个文件中,方便程序自动化的管理。增加的CPU和内存的监控默认killasgroup,所有启动程序在停止后,不会有残余的进程加入了fatal状态的pushover通知的功能支持了github的webhook,在github代码更新的时候,可以触发更新命令,并重启程序gosuv程序加入了自更新功能
评论