系统服务管理 supervisor

系统服务管理 supervisor

  • 1. 进程管理服务概述
    • 1.1 supervisor 进程管理工具概述
    • 1.2 supervisor 进程管理服务组成
    • 1.3 supervisor 服务运行环境说明
  • 2. 进程管理服务部署
    • 2.1 进程管理服务安装过程
    • 2.2 进程管理服务配置信息
    • 2.3 进程管理服务命令使用
    • 2.4 进程管理服务启动应用
  • 3. 进程管理服务进程
    • 3.1 进程管理应用实战 - Nginx
    • 3.2 进程管理应用实战 - tomcat


1. 进程管理服务概述

1.1 supervisor 进程管理工具概述

supervisor是一个进程管理工具,当进程中断的时候supervisor能自动重新启动它;
supervisor是一个客户端/服务器系统,它允许用户在类unix操作系统上控制多个进程;
supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon;并监控进程状态,异常退出时能自动重启;
supervisor是通过fork/exec的方式把这些被管理的进程当作supervisor的子进程来启动,这样只要在supervisor的配置文件中,把要管理的进程的可执行文件的路径写进去即可;
可实现当子进程挂掉的时候,父进程可以准确获取子进程挂掉的信息的,可以选择是否自己启动和报警;
supervisor还提供了一个功能,可以为supervisord或者每个子进程,设置一个非root的user,这个user就可以管理它对应的进程。
官方技术资料链接:http://www.supervisord.org/introduction.html

1.2 supervisor 进程管理服务组成

supervisor主要包括以下四个核心部分组成:
(1)supervisord
这是supervisor服务的主要管理器,运行 Supervisor 时会启动一个进程 supervisord,它负责启动所管理的进程
并将所管理的进程作为自己的子进程来启动,而且可以在所管理的进程出现崩溃时自动重启
(2)supervisorctl
这是supervisor服务的客户端命令行工具,可以用来执行 stop、start、restart 等命令,来对这些子进程进行管理
(3)web Server
这是supervisor服务的网页可视化界面,可以通过web界面查看和控制进程状态,简化了对操作命令的学习
(4)xml-rpc interface
服务与web ui的同一个http服务器,提供一个xml-rpc接口,可以用来询问和控制管理程序及其他运行的程序

1.3 supervisor 服务运行环境说明

supervisor可以运行在大多数类unix系统,但是不能运行在任何windows系统,supervisor运行在python环境中;
可以在python2(2.7) 版本上工作、python3 (3.4) 版本上工作、以及更高python版本上。

2. 进程管理服务部署

2.1 进程管理服务安装过程

安装过程第一步:安装python工具

	yum install -y python-pip

安装过程第二步:安装supervisor程序

	pip instal1 supervisor

安装过程第三步:核心确认supervisor是否安装成功

	echo_supervisord_conf
	# 通过执行以上命令,通过输出信息可以确认supervisor服务是否安装成功

2.2 进程管理服务配置信息

supervisor进程管理服务程序安装完毕后,会在系统中生成两个主要的配置文件:

# 主进程配置文件:
	/etc/supervisord.conf
# 子进程配置文件: 
	/etc/supervisord.d/

主进程配置文件信息解析:

配置区域 配置信息 解释说明
[unix_http_server] file=/var/run/supervisor/supervisor.sock socket套接字⽂件,⽤于客户端与服务端建⽴本地连接
chmod=0700 socket⽂件权限设置,默认是0700
chown=nobody:nogroup socket⽂件属主与属组信息设定,格式:uid:gid
[inet_http_server] port=127.0.0.1:9001 Web管理后台运⾏的IP和端⼝
username=user 登录管理后台的⽤户名
password=123 登录管理后台的密码
[supervisord] logfile=/tmp/supervisord.log 服务运⾏的⽇志⽂件
logfile_maxbytes=50MB ⽇志⽂件⼤⼩,超出会rotate,默认 50MB,如果设成0,表示不限制⼤⼩
logfile_backups=10 ⽇志⽂件保留备份数量默认10,设为0表示不备份
loglevel=info ⽇志级别,默认info,其它: debug,warn,trace
pidfile=/tmp/supervisord.pid pid ⽂件
nodaemon=false 是否在前台启动,默认是false,即以 daemon 的⽅式启动
minfds=1024 可以打开的⽂件描述符的最⼩值,默认 1024
minprocs=200 可以打开的进程数的最⼩值,默认 200
[supervisorctl] serverurl=unix:///tmp/supervisor.sock 通过UNIX socket连接supervisord,路径与unix_http_server部分的file⼀致
serverurl=http://127.0.0.1:9001 通过HTTP的⽅式连接supervisord
[program:tomcat] 是被管理的进程配置参数,xx是进程的名称
command=/opt/apache-tomcat8.0.35/bin/catalina.sh run 程序启动命令
autostart=true 在supervisord启动的时候也⾃动启动
startsecs=10 启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒
autorestart=true 程序退出后⾃动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启
startretries=3 启动失败⾃动重试次数,默认是3
user=tomcat ⽤哪个⽤户启动进程,默认是root
priority=999 进程启动优先级,默认999,值⼩的优先启动
redirect_stderr=true 把stderr重定向到stdout,默认false
stdout_logfile_maxbytes=20MB stdout ⽇志⽂件⼤⼩,默认50MB
stdout_logfile_backups = 20 stdout ⽇志⽂件备份数,默认是10
stdout_logfile=/opt/apache-tomcat8.0.35/logs/catalina.out stdout ⽇志⽂件,需要注意当指定⽬录不存在时⽆法正常启动,所以需要⼿动创建⽬录(supervisord 会⾃动创建⽇志⽂件)
stopasgroup=false 默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括⼦进程
killasgroup=false 默认为false,向进程组发送kill信号,包括⼦进程
[include] iles = relative/directory/*.ini 可以指定⼀个或多个以.ini结束的配置⽂件

子进程配置文件信息解析:
给需要管理的子进程(程序)编写一个配置文件,放在/etc/supervisor.d/目录下,以ini作为扩展名;每个进程的配置文件都可以单独分拆也可以把相关的脚本放一起;
任意定义一个和脚本相关的项目名称的选项组,例如: /etc/supervisord.d/test.conf

#项⽬名
[program:tomcat]
#脚本⽬录
directory=/opt/bin
#脚本执⾏命令
command=/usr/bin/python /opt/bin/test.py
#supervisor启动的时候是否随着同时启动,默认True
autostart=true
#当程序exit的时候,这个program不会⾃动重启,默认unexpected,设置⼦进程挂掉后⾃动重启的情况,有三个
选项,false,unexpected和true。如果为false的时候,⽆论什么情况下,都不会被重新启动,如果为
unexpected,只有当进程的退出码不在下⾯的exitcodes⾥⾯定义的
autorestart=false
#这个选项是⼦进程启动多少秒之后,此时状态如果是running,则我们认为启动成功了。默认值为1
startsecs=1
#脚本运⾏的⽤户身份
user = test
#⽇志输出
stderr_logfile=/tmp/blog_stderr.log
stdout_logfile=/tmp/blog_stdout.log
#把stderr重定向到stdout,默认 false
redirect_stderr = true
#stdout⽇志⽂件⼤⼩,默认 50MB
stdout_logfile_maxbytes = 20MB
#stdout⽇志⽂件备份数
stdout_logfile_backups = 20

⼦进程配置示例:

[program:test]
directory=/opt/bin
command=/opt/bin/test
autostart=true
autorestart=false
stderr_logfile=/tmp/test_stderr.log
stdout_logfile=/tmp/test_stdout.log
#user = test

2.3 进程管理服务命令使用

在使⽤supervisor进程管理⼯具时,也会经常⽤到⼀些命令对⼯具进⾏管理控制:
docker – docker.ini –

序号 命令信息 作⽤说明
01 supervisorctl status 查看所有进程的状态
02 supervisorctl stop es 停⽌es服务程序
03 supervisorctl start es 启动es服务程序
04 supervisorctl restart es 重启es服务程序
05 supervisorctl update 配置⽂件修改后使⽤该命令加载新的配置
06 supervisorctl reload 重新启动配置中的所有程序

说明:
把es换成all可以管理配置中的所有进程。
直接输⼊supervisorctl进⼊supervisorctl的shell交互界⾯,此时上⾯的命令不带supervisorctl可直接使⽤。

2.4 进程管理服务启动应用

使⽤supervisor进程管理命令之前需要先启动supervisord,启动⽅法如下:

# 利⽤命令启动服务程序
supervisord -c /etc/supervisord.conf
# 利⽤systemd管理启动服务
systemctl start supervisord.service
# -- 启动supervisor并加载默认配置⽂件
systemctl enable supervisord.service
# -- 将supervisor加⼊开机启动项
# 确认服务是否启动
ps -ef|grep supervisor
root 12931 1 0 18:16 ? 00:00:00 /usr/bin/python /usr/bin/supervisord
-c /etc/supervisord.conf
supervisorctl status
# -- 执⾏以上命令信息,输出信息为空,表示没有配置项⽬信息,但服务部署过程基本完成

3. 进程管理服务进程

3.1 进程管理应用实战 - Nginx

supervisor 服务项⽬创建
为了演示实现supervisor服务的功能,可以临时部署⼀个nginx服务程序,对nginx服务的进程进⾏监控;
下载安装nginx程序包:

	yum install -y nginx

supervisor服务项⽬配置
修改上⾯说明的supervisord.conf⽂件,⽂件最后两⾏配置信息的注释取消掉,也就是去掉分号信息:

	[include]
	files = supervisord.d/*.ini
	# -- 指定需要加载的程序项⽬配置⽂件信息

创建⼀个测试使⽤的服务配置⽂件:nginx.ini

[root@xiaoQ supervisord.d]# cat nginx.ini
[program:nginx]
directory=/usr/sbin/
command=/usr/sbin/nginx -g 'daemon off;'
autostart=true
autorestart=true
startsecs=3
user=root
stderr_logfile=/tmp/nginx_stderr.log
stdout_logfile=/tmp/nginx_stdout.log

supervisor服务重新启动
编写完supervisor管理的进程服务配置⽂件后,可以使supervisor服务重新启动,加载编写的服务配置⽂件;

# 重启supervisor服务程序
systemctl restart supervisord.service
# 检查对应管理的服务程序是否启动
[root@docker-server supervisord.d]# ps -ef|grep nginx
root 13338 13317 0 22:12 ? 00:00:00 nginx: master process
/usr/sbin/nginx -g daemon off;
nginx 13339 13338 0 22:12 ? 00:00:00 nginx: worker process
nginx 13340 13338 0 22:12 ? 00:00:00 nginx: worker process
nginx 13341 13338 0 22:12 ? 00:00:00 nginx: worker process
nginx 13342 13338 0 22:12 ? 00:00:00 nginx: worker process

通过web界⾯查看服务进程运⾏情况:
supervisor服务修复测试
尝试杀掉nginx服务程序,模拟企业服务异常情况崩溃,查看supervisor服务是否能够⾃动重启nginx程序:

# 尝试模拟杀死进程
[root@docker-server supervisord.d]# kill 13338
-bash: kill: (13338) - No such process
# 查询nginx服务进程是否可以⾃动重启
[root@docker-server supervisord.d]# ps -ef|grep nginx
root 13346 13317 0 22:16 ? 00:00:00 nginx: master process
/usr/sbin/nginx -g daemon off;
nginx 13347 13346 0 22:16 ? 00:00:00 nginx: worker process
nginx 13348 13346 0 22:16 ? 00:00:00 nginx: worker process
nginx 13349 13346 0 22:16 ? 00:00:00 nginx: worker process
nginx 13350 13346 0 22:16 ? 00:00:00 nginx: worker process
# -- 可以根据重启服务进程号信息可知,nginx服务已经实现了重启

3.2 进程管理应用实战 - tomcat

supervisor服务项⽬创建
为了演示实现supervisor服务的功能,可以临时部署⼀个tomcat服务程序,对tomcat服务的进程进⾏监控;
下载安装jdk8程序包:

yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel

设置配置jdk8环境变量:

# 编写环境变量配置⽂件
vim /etc/profile.d/java8.sh
export JAVA_HOME=$(dirname $(dirname $(readlink $(readlink $(which javac)))))
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
# 加载环境变量配置信息
source /etc/profile.d/java8.sh
# 检查环境变量是否⽣效
echo $JAVA_HOME
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.352.b08-2.el7_9.x86_64
或者
printenv JAVA_HOME
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.352.b08-2.el7_9.x86_64

检查jdk8程序包是否安装成功:

[root@xiaoQ ~]# java -version
openjdk version "1.8.0_352"
OpenJDK Runtime Environment (build 1.8.0_352-b08)
OpenJDK 64-Bit Server VM (build 25.352-b08, mixed mode)
[root@xiaoQ ~]# javac -version
javac 1.8.0_352

下载安装tomcat程序:

[root@xiaoQ ~]# cd /usr/local/
[root@xiaoQ ~]# rz -y
# -- 将从官⽅下载的tomcat程序包上传此⽬录中
# 解压tomcat程序压缩包
[root@xiaoQ local]# tar xf apache-tomcat-8.5.83.tar.gz

supervisor服务项⽬配置
修改上⾯说明的supervisord.conf⽂件,⽂件最后两⾏配置信息的注释取消掉,也就是去掉分号信息:

[include]
files = supervisord.d/*.ini
# -- 指定需要加载的程序项⽬配置⽂件信息

创建⼀个测试使⽤的服务配置⽂件:nginx.ini

[root@xiaoQ supervisord.d]# cat tomcat.ini
[program:tomcat]
stopasgroup=true
user=root
environment=JAVA_HOME="/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.352.b08-
2.el7_9.x86_64",JAVA_BIN="/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.352.b08-
2.el7_9.x86_64/bin"
-- 指定linux环境Java的安装位置,如果忘记了,在命令⾏输⼊echo $JAVA_HOME来得到
directory=/usr/local/apache-tomcat-8.5.83
-- 指定tomcat程序存放路径信息
command=/usr/local/apache-tomcat-8.5.83/bin/catalina.sh run
-- 指定tomcat启动脚本路径信息
autostart=true
autorestart=true
startsecs=60
user=root
stderr_logfile=/usr/local/apache-tomcat-8.5.83/logs/catalina.err
stdout_logfile=/usr/local/apache-tomcat-8.5.83/logs/catalina.out

supervisor服务重新加载
编写完supervisor管理的进程服务配置⽂件后,可以使supervisor服务加载新的服务进程,识别新编写的服务配置
⽂件;

[root@xiaoQ apache-tomcat-8.5.83]# supervisorctl update
tomcat: added process group

通过web界⾯查看服务进程运⾏情况:

你可能感兴趣的:(Linux,linux,服务器,网络)