背景
有多台服务器,每台服务器需要管理/守护多个进程(进程crash后立即重启)
服务器 CentOS 7.3 x64
supervisor版本 3.1.4
cesi版本 1.0
选择方案
守护进程的方案选择
1. crontab方案
优点:比较简单,不需要安装额外的软件
缺点:全手工管理,易出错,服务器、进程多了以后管理成本高
2. supervisor方案
优点:可以集中管理所有的进程,配合cesi可管理集群
缺点:需要额外安装软件,引入新的依赖,supervisor进程挂掉的情况下被守护的进程也会挂掉
考虑到维护管理成本,选择使用supervisor方案,为了方便的管理多台,引入cesi来管理supervisor集群
安装supervisor
supervisor介绍
安装过程比较简单
参考
# 安装epel源
$ yum install epel-release
# 安装supervisor
$ yum install -y supervisor
$ systemctl enable supervisord # 开机自启动
# systemctl start supervisord # 启动supervisord服务
常用命令
$ systemctl stop supervisord # 停止服务
$ systemctl start supervisord # 启动服务
$ systemctl status supervisord # 查看服务状态
$ systemctl reload supervisord # 重新加载配置文件
$ systemctl restart supervisord # 重启服务
supervisorctl是用来管理supervisord进程的管理工具
supervisorctl reload # 重启supervisord进程,会导致所有被守护的进程重启
supervisorctl update # 更新配置文件,如果配置文件有变更(新增、修改、减少被守护进程),可使用此命令重新加载配置文件
问题记录
如果使用pip安装,在设置启动脚本的时候,需要注意一下,systemctl start supervisord后会报错,实际上应用已经正常启动,原因是教程中的systemctl配置文件有一处错误,需要去掉PIDFile项,supervisord有自己的pid存放位置,
参考官方的启动脚本
配置supervisor
# vim /etc/supervisord.conf
# 打开http服务
# 修改 [inet_http_server] 节点,去掉注释,修改ip、端口、用户名、密码
[inet_http_server] ; inet (TCP) server disabled by default
port=127.0.0.1:9001 ; ip_address:port specifier, *:port for all iface
;username=user ; default is no username (open server)
;password=123 ; default is no password (open server)
...
# 打开配置文件夹
[include]
files = /etc/supervisord.d/*.ini
reload进程即可
supervisorctl reload
至此,supervisor配置完成
配置nginx反向代理
由于服务商的安全策略,9001端口不能提供http服务,使用nginx配置一个反向代理
# vi /path/to/nginx/vhost/supervisor.conf
server{
charset utf-8;
listen 80;
server_name supervisor.domain.com;
access_log $log_root/supervisor.log;
error_log $log_root/supervisor_error.log;
location / {
proxy_pass http://127.0.0.1:9001;
}
}
通过supervisor.domain.com即可访问supervisor的管理页面
cesi安装与配置
supervisor自带的管理界面略有一点小问题,在nginx反向代理后,点击页面上的功能链接,还是会自动跳到127.0.0.1:9001路径下,导致功能不可用,因此引入cesi来作supervisor的管理界面,同时也可以管理集群,一举多得
cesi介绍
安装cesi
参考文档
yum install git python-flask
git clone https://github.com/gamegos/cesi /opt/cesi
sqlite3 /opt/cesi/userinfo.db < /opt/cesi/userinfo.sql
ln -s /opt/cesi/defaults/cesi.conf /etc/cesi.conf # 配置文件软链接
# 作为服务运行
cp /opt/cesi/defaults/cesi.service /etc/systemd/system/cesi.service
systemctl daemon-reload
systemctl start cesi
配置cesi
# vi /etc/cesi.conf
# 配置节点,与上一步配置的用户、端口一致
[node:first]
username = abc
password = 123
host = 127.0.0.1
port = 9001
# 配置cesi自身
[cesi]
database = /opt/cesi/userinfo.db
activity_log = /opt/cesi/activity.log
host = 127.0.0.1 # 仅允许本地的连接
重启cesi
systemctl restart cesi
配置nginx反向代理
# vi /path/to/nginx/vhost/cesi.conf
server{
charset utf-8;
listen 80;
server_name cesi.domain.com;
access_log $log_root/cesi.log;
error_log $log_root/cesi_error.log;
location / {
proxy_pass http://127.0.0.1:5000; # cesi默认端口
}
}
使用cesi.domain.com即可访问cesi,配置完成。
分享到:
相关推荐
Supervisor守护进程离线脚本无脑安装
在Linux环境中,用uwsgi+daphne+Nginx+supervisor部署Django项目,史上最全步骤
centos,supervisor守护进程防止进程崩溃后不能进行访问,本示例针对net5或者netcore进行进程守护
#功能:weblogic守护进程:监控weblogic进程,当发现进程停止时调用重启脚本重启 #参数:进程唯一标识码,例如“weblogic” #依赖脚本:数据库操作脚本dbExecurteSQL.sh,weblogic重启脚本$PSSC_DOMAIN/startPssc.sh...
Supervisor是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统。它可以很方便的监听、启动、停止、重启一个或多个进程。用Supervisor管理的进程,当一个进程意外被杀...
使用Supervisor管理Linux进程.docx
【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业...定时任务源码+项目说明(集成django使用,配合监控工具flower,进程管理工具supervisor的demo).zip
本文实例讲述了Python使用Supervisor来管理进程的方法。分享给大家供大家参考。具体分析如下: Supervisor可以启动、停止、重启*nix系统中的程序。也可以重启崩溃的程序。 supervisord的一个守护进程,用于将指定的...
python脚本supervisord是很多人用来管理进程的强大工具
用Supervisor管理的进程,当一个进程意外被杀死,supervisort监听到进程死后,会自动将它重新拉起,很方便的做到进程自动恢复的功能,不再需要自己写shell脚本来控制。 因为Supervisor是Python开发的,安装前先检查...
主要为大家详细介绍了PHP程序员玩转Linux系列文章,使用supervisor实现守护进程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
本项目主要介绍基于 Docker 的 Web 开发和部署(开发要求在改动代码时服务或页面能够实时发生变化)全流程,来源于日常项目,后端以 Django 为例,前端以 React 为例,使用到的其他模块也可以换成同类产品,比如 ...
Supervisor安装配置及问题--linux进程守护 Supervisor安装配置及问题--linux进程守护 Supervisor安装配置及问题--linux进程守护
Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。它是通过fork/exec的方式把这些被管理的进程当作supervisor的子进程来启动,...
supervisor是linux下的线程守护工具,在 Linux 上有很多可以管理进程的工具,我们使用 Supervisor 来做这个事情。原因有两点: 1、它是微软官方文档推荐的,降低学习成本。 2、它并不一定是最好的,但一定是...
Supervisor 是基于 Python 的进程管理工具,可以轻松管理一些需要以守护进程方式执行的程序,也就是后台任务,例如用来启动和管理基于 Tornado 写的 Web 程序。
不想下载的可以访问原文(内有代码) ... 基于C语言开发的简易版supervisor,进程间的通信使用的是NNG通信库(nng-1.5.2) 1.支持supervisorctrl status、...4.暂不支持管理进程所产生的子进程 可根据自己需求自行优化开发
积分调少些,希望能方便大伙。 本案是模仿supervisor,使用注册监控程序,来实现管控。linux c 编写。 可用来不同进程的监管,接口简单方便使用。