使用Cesi+Supervisor实现进程管理
相信很多的运维小伙伴都是饱受进程丢失的痛苦,最怕半夜被手机吵醒,那一定是经理想你
不管进程是前台运行还是后台静默运行,我们都需要能监控其进程状态。
原因有三:
一,在意外结束时能把他重启。
二,在意外结束时能发出报警短信提示管理员
supervisor就是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。关于supervisor的部署与使用,可以参考我的另一篇文章 https://blog.csdn.net/weixin_44449055/article/details/88966342?spm=1001.2014.3001.5501
今天咱们要说的是Cesi的使用。CeSi 是 Supervisor 官方推荐的集中化管理 Supervisor 实例的 Web UI,而Superviosr 自带的 Web UI 不支持跨机器管理,可以通过 CeSi 集中管理各个服务器节点的进程,在 Web 界面就可以轻松管理各个服务的启动、关闭、重启等,很方便使用。
Cesi安装
安装 CeSi 有三个依赖:Python,Flask,sqlite3 。python还有sqlite3 不需要,一般情况下linux服务器会自带。因此只安装 flask web 框架即可。
1. 安装flask
pip install flask
2. 下载cesi
git clone https://github.com/GulsahKose/cesi
3. 安装cesi
cd cesi
mkdir db
sqlite3 db/userinfo.db < userinfo.sql
cp cesi.conf /etc/cesi.conf
vi /etc/cesi.conf(自行修改内容,很简单)
cd cesi
python web.py
Cesi配置说明
CeSi 的配置很容易看懂,和 Supervisor 的配置文件类似,也是 INI 格式。
[node:node1] ;各 Supervisor 节点的配置
username = ; Supervisor 节点的账密,如果没有设置账号密码,则为空
password =
host = 127.0.0.1
port = 9001
[node:node2]
username =
password =
host = node2.d.com
port = 9001
[node:node3]
username =
password =
host = node3.d.com
port = 9001
[cesi] ; CeSi 自身的配置
database = userinfo.db
activity_log = /var/logs/cesi/cesi.log
host = 0.0.0.0
# 端口可以在web.py最下面的app.run中修改,默认是5000
port = 5000
name = CeSI
theme = superhero
Cesi启动
CeSi 的启动非常简单,直接通过 Python 启动即可:
python cesi/web.py
为了方便管理,建议把 CeSi 也通过 Supervisor 来管理,配置可以参考下面的示例;
cat supervisor/conf.conf.d/cesi.conf
[program:cesi]
directory = /home/dev/cesi/ ; 程序的启动目录
command = python cesi/web.py
autostart = true ; 在 supervisord 启动的时候也自动启动
startsecs = 5 ; 启动 5 秒后没有异常退出,就当作已经正常启动了
autorestart = true ; 程序异常退出后自动重启
startretries = 3 ; 启动失败自动重试次数,默认是 3
user = dev ; 用哪个用户启动
redirect_stderr = true ; 把 stderr 重定向到 stdout,默认 false
stdout_logfile_maxbytes = 30MB ; stdout 日志文件大小,默认 50MB
stdout_logfile_backups = 3 ; stdout 日志文件备份数
stdout_logfile = /home/dev/cesi/stdout.log
Cesi登录http://127.0.0.1:5000,默认账密admin / admin。Cesi页面展示如下