当前位置: 当前位置:首页 >应用开发 >进阶必备 | Linux系统管理工具 supervisor 详解,代码齐全可复制! 正文

进阶必备 | Linux系统管理工具 supervisor 详解,代码齐全可复制!

2025-11-05 02:35:32 来源:多维IT资讯作者:应用开发 点击:872次

  supervisor是进阶具s解代一个进程管理工具,当进程中断的必备时候supervisor能自动重新启动它,同时,系r详它也是统管一个客户端/服务器系统,允许用户在类unix操作系统上控制多个进程。理工

  supervisor是码齐用Python开发的一套通用的进程管理程序,能将一个普通的复制命令行进程变为后台daemon,并监控进程状态,进阶具s解代异常退出时能自动重启。必备

  supervisor是系r详通过fork/exec的方式把这些被管理的进程当作supervisor的子进程来启动,这样只要在supervisor的统管配置文件中,把要管理的理工进程的可执行文件的路径写进去即可。

  可实现当子进程挂掉的码齐时候,父进程可以准确获取子进程挂掉的复制信息的,可以选择是进阶具s解代否自己启动和报警。站群服务器

  supervisor还提供了一个功能,可以为supervisord或者每个子进程,设置一个非root的user,这个user就可以管理它对应的进程。

  supervisor进程管理服务组成

  supervisor主要包括以下四个核心部分组成:

  supervisord

  这是supervisor服务的主要管理器,运行 Supervisor 时会启动一个进程 supervisord,它负责启动所管理的进程;

  并将所管理的进程作为自己的子进程来启动,而且可以在所管理的进程出现崩溃时自动重启。

  supervisorctl

  这是supervisor服务的客户端命令行工具,可以用来执行stop、start、restart等命令,来对这些子进程进行管理。

  web Server

  这是supervisor服务的网页可视化界面,可以通过web界面查看和控制进程状态,简化了对操作命令的学习;

  xml-rpc interface

  服务与web ui的同一个http服务器,提供一个xml-rpc接口,可以用来询问和控制管理程序及其他运行的程序;

  supervisor服务运行环境说明

  supervisor可以运行在大多数类unix系统,云服务器提供商但是不能运行在任何windows系统,supervisor运行在python环境中;

  可以在python2(2.7)版本上工作、python3(3.4)版本上工作、以及更高python版本上。

  进程管理服务部署

  进程管理服务安装过程

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

[root@xiaoQ ~]# yum install -y python-pip

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

[root@xiaoQ ~]# pip install supervisor

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

[root@xiaoQ~]# echo_supervisord_conf -- 通过执行以上命令,通过输出信息可以确认supervisor服务是否安装成功

  进程管理服务配置信息

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

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

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

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

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

  给需要管理的子进程(程序)编写一个配置文件,放在/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

  进程管理服务命令使用

  在使用supervisor进程管理工具时,也会经常用到一些命令对工具进行管理控制:

  把es换成all可以管理配置中的所有进程。

  直接输入supervisorctl进入supervisorctl的shell交互界面,此时上面的命令不带supervisorctl可直接使用。

  进程管理服务启动应用

  使用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 -- 执行以上命令信息,输出信息为空,表示没有配置项目信息,但服务部署过程基本完成

  进程管理服务进程

  进程管理应用实战-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服务已经实现了重启

  进程管理应用实战-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界面查看服务进程运行情况:

作者:系统运维
------分隔线----------------------------
头条新闻
图片新闻
新闻排行榜