简介
Supervisor(http://supervisord.org/)C/S架构的进程控制系统,是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,基于linux操作系统的一款服务器管理工具,不支持Windows系统。
用以监控服务器的运行,发现问题能立即自动预警及自动重启等功能。
Supervisor类似于monit,monit和supervisor的一个比较大的差异是supervisor管理的进程必须由supervisor来启动,
monit可以管理已经在运行的程序;supervisor还要求管理的程序是非daemon程序,supervisord会帮你把它转daemon程序,因此如果用supervisor来管理nginx的话,必须在nginx的配置文件里添加一行设置daemon off让nginx以非daemon方式启动。
应用场景
公司服务器众多,项目多以tomcat为主,而且服务器上tomcat节点比较多,此时通过脚本管理tomcat已经非常棘手,就需要一个统一的进程管理工具去统一管理项目。因此选用supervisor来管理。
传统的将程序放置后台启动:
&放置后台启动;但是一般和nohup(不挂断运行命令)一起用;常用方法;nohup command &
注意:supervisor只能管理前台进程。
安装配置
官网:http://www.supervisord.org/
supervisor安装完成后会生成三个执行程序:
supervisord : supervisor的守护进程服务(用于接收进程管理命令)
supervisorctl : 客户端(用于和守护进程通信,发送管理进程的指令)
echo_supervisord_conf : 生成初始配置文件程序。
安装supervisor设置开机自启
[[email protected] ~]# yum -y install supervisor
[[email protected] ~]# systemctl enable supervisord.service
通过supervisor管理tomcat
配置jdk环境:
jdk下载:拾光记忆不微伤分享
原文链接:https://blog.csdn.net/qq_22805577/article/details/80075775
[[email protected] ~]# tar xzf jdk-8u60-linux-x64.tar.gz -C /usr/local/
[[email protected] ~]# chown -R root.root /usr/local/jdk1.8.0_60
[[email protected] ~]# cat>>/etc/profile<<\EOF
> ###jdk环境###
> export JAVA_HOME=/usr/local/jdk1.8.0_60
> export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
> export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
> EOF
[[email protected] ~]# source /etc/profile
[[email protected] ~]# java -version
java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)
[[email protected] ~]#
安装tomcat:
官网下载地址:http://tomcat.apache.org/
[[email protected] ~]# tar xzf apache-tomcat-8.5.35.tar.gz
[[email protected] ~]# mv apache-tomcat-8.5.35 /opt/tomcat1
supervisor主配置文件详解:
[[email protected] ~]# cat /etc/supervisord.conf
[unix_http_server] # 负责supervisorctl和supervisord主程序通讯的
;[inet_http_server] # supervisor自带UI界面有关
[supervisord] # supervisord主程序的配置
[supervisorctl] # supervisorctl命令行(客户端)
;[program:theprogramname] # supervisord管理的子项目配置
;[eventlistener:theeventlistenername] #监听
[include]
files = /etc/supervisor/conf.d/*.conf ;加载其他配置文件
[inet_http_server] ; inet (TCP) server disabled by default
port=*:9001 ; 通过网页可以控制子进程
;username=user ; (default is no username (open server))
;password=123 ; (default is no password (open server))
; 进程的配置样例
; 设置进程的名称,使用 supervisorctl 来管理进程时需要使用该进程名,这里的进程名是 your_program_name
[program:your_program_name]
;numprocs=1 ; 进程数量,默认为1
;process_name=%(program_name)s ; 默认为 %(program_name)s,即 [program:x] 中的 x
directory=/home/yiming ; 执行 command 之前,先切换到工作目录
command=python test.py
autostart=true ;如果设置为true,当supervisord启动的时候,进程会自动重启。
user=yiming ; 使用 yiming 用户来启动该进程
autorestart=true ; 程序崩溃时自动重启,重启次数是有限制的,默认为3次
startsecs = 5 ; 启动 5 秒后没有异常退出,就当作已经正常启动了
redirect_stderr=true ; 错误日志重定向到标准输出
loglevel=info
创建supervisor管理tomcat的子配置文件:
下面添加的参数,上面的主配置文件详解有解释
command::前台启动Tomcat命令
environment:指定环境
[[email protected] ~]# vim /etc/supervisord.d/tomcat1.ini
[program:tomcat1]
command=/opt/tomcat1/bin/catalina.sh run
environment=JAVA_HOME="/usr/local/jdk1.8.0_60",JAVA_BIN="/usr/local/jdk1.8.0_60/bin"
directory=/opt/tomcat1/bin/
numprocs=1
user = root
autostart = true
autorestart=true
startsecs = 5
bash终端管理
命令行模式:
#常用supervisorctl命令
supervisorctl status 状态
supervisorctl stop 停止
supervisorctl start 启动
supervisorctl restart 重启
supervisorctl reread 重读
supervisorctl update 更新
交互模式:
[[email protected] ~]# supervisorctl
unix:///var/run/supervisor/supervisor.sock no such file
supervisor> help
default commands (type help <topic>):
=====================================
add exit open reload restart start tail
avail fg pid remove shutdown status update
clear maintail quit reread signal stop version
supervisor> status
unix:///var/run/supervisor/supervisor.sock no such file
supervisor> exit
[[email protected] ~]#
用supervisor启动Tomcat
[[email protected] ~]# systemctl start supervisord.service
[[email protected] ~]# supervisorctl status
tomcat1 RUNNING pid 3710, uptime 0:00:14
[[email protected] ~]# ps -ef | grep tomcat
浏览器访问
http://ip:8080
配置supervisor管理多台Tomcat
分别拷贝一份Tomcat和supervisor管理tomcat的子配置文件
[[email protected] ~]# cp -a /opt/tomcat1/ /opt/tomcat2
[[email protected] ~]# cp /etc/supervisord.d/tomcat1.ini /etc/supervisord.d/tomcat2.ini
修改第二台Tomcat的端口,防止与第一台端口冲突
[[email protected] ~]# vim /opt/tomcat2/conf/server.xml
#分别修改下面这三个端口
<Server port="8006" shutdown="SHUTDOWN">
<Connector port="8081" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />
修改刚才拷贝的supervisor管理tomcat的子配置文件
[[email protected] ~]# vim /etc/supervisord.d/tomcat2.ini
[program:tomcat2]
command=/opt/tomcat2/bin/catalina.sh run
environment=JAVA_HOME="/usr/local/jdk1.8.0_60",JAVA_BIN="/usr/local/jdk1.8.0_60/bin"
directory=/opt/tomcat2/bin/
numprocs=1
user = root
autostart = true
autorestart=true
startsecs = 5
修改完配置文件,更新supervisor
[[email protected] ~]# supervisorctl update
tomcat2: added process group
[[email protected] ~]# supervisorctl status
tomcat1 RUNNING pid 3710, uptime 0:17:17
tomcat2 RUNNING pid 3914, uptime 0:00:06
[[email protected] ~]# ps -ef | grep tomcat
网站访问页面记得填写修改的端口
http://ip:8081
supervisor 自带Web管理界面
出于安全考虑,默认配置是没有开启web管理界面,需要修改supervisord.conf配置文件打开http访权限,将下面的配置:
[[email protected] ~]# vim /etc/supervisord.conf
[[email protected] ~]# systemctl restart supervisord.service
访问测试
http://ip:9001