一、Supervisor简介
Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。它是通过fork/exec的方式把这些被管理的进程当作supervisor的子进程来启动,这样只要在supervisor的配置文件中,把要管理的进程的可执行文件的路径写进去即可。也实现当子进程挂掉的时候,父进程可以准确获取子进程挂掉的信息的,可以选择是否自己启动和报警。supervisor还提供了一个功能,可以为supervisord或者每个子进程,设置一个非root的user,这个user就可以管理它对应的进程。
二、安装教程
1、Linux环境准备
安装java环境
yum -y install java-1.8.0-openjdk
*添加变量
/etc/profile
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.252.b09-2.el7_8.x86_64
PATH=$PATH:$JAVA_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME CLASSPATH PATH
*安装所需要的软件包
yum -y install vim curl wget zip unzip
2、安装supervisor
Yum -y install supervisor
3、配置supervisor
主要文件有:/etc/supervisord.conf
/etc/superconfig/(此目录为新建的目录,主要是存放进程的配置文件)
/usr/local/src/(主要存放进程的启动文件需要从所管理进程的服务上拷贝)
4、配置文件的修改
/etc/supervisord.conf
以上是web管理界面的地址和用户密码
定义进程配置文件的存储位置
每一个需要管理的进程都需要在/etc/superconfig下面创建对应的配置文件例如
配置文件解析
Directory:程序的启动目录,也就是我们从进程服务器端拷贝.JAR文件存放的目录
此目录下的logs目录为进程的日志目录,这个是我们新建的目录
Command:/usr/bin/java 此目录为java的目录
-jar
/usr/local/src/live-eureka.jar 定义进程java启动所执行的文件位置
5、supervisor命令解析
第一次启动supervisord
Supervisorctl -c /etc/supervisord.conf
以后启动只需要
[root@localhost src]# supervisorctl
status # 查看程序状态
stop usercenter # 关闭 usercenter 程序
start usercenter # 启动 usercenter 程序
restart usercenter # 重启 usercenter 程序
reread # 读取有更新(增加)的配置文件,不会启动新添加的程序
update # 重启配置文件修改过的程序
6、常见问题
unix:///var/run/supervisor.sock no such file
问题描述:安装好supervisor没有开启服务直接使用supervisorctl报的错
解决办法:supervisord -c /etc/supervisord.conf
command中指定的进程已经起来,但supervisor还不断重启
问题描述:command中启动方式为后台启动,导致识别不到pid,然后不断重启,这里使用的是elasticsearch,command指定的是$path/bin/elasticsearch -d
解决办法:supervisor无法检测后台启动进程的pid,而supervisor本身就是后台启动守护进程,因此不用担心这个
启动了多个supervisord服务,导致无法正常关闭服务
问题描述:在运行supervisord -c /etc/supervisord.conf之前,直接运行过supervisord -c /etc/supervisord.d/xx.conf导致有些进程被多个superviord管理,无法正常关闭进程。
解决办法:使用ps -fe | grep supervisord查看所有启动过的supervisord服务,kill相关的进程。