Linux 系统管理工具 supervisor 详解

目录

  • 1. Linux 系统管理工具 supervisor 详解
    • 1.1. supervisor 进程管理服务组成
    • 1.2. 进程管理服务部署
    • 1.3. 进程管理服务配置信息
    • 1.4. 进程管理服务命令使用
    • 1.5. 进程管理服务启动应用
    • 1.6. 进程管理服务进程
      • 1.6.1. 进程管理应用实战-Nginx

1. Linux 系统管理工具 supervisor 详解

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

supervisor 是用 Python 开发的一套通用的进程管理程序, 能将一个普通的命令行进程变为后台 daemon, 并监控进程状态, 异常退出时能自动重启。

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

可实现当子进程挂掉的时候, 父进程可以准确获取子进程挂掉的信息的, 可以选择是否自己启动和报警。

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

1.1. 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 版本上。

1.2. 进程管理服务部署

进程管理服务安装过程

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

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

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

[root@Linux ~]# pip install supervisor

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

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

1.3. 进程管理服务配置信息

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 启动的时候是否随着同时启动, 默认 Trueautostart=true#当程序 exit 的时候, 这个 program 不会自动重启, 默认 unexpected, 设置子进程挂掉后自动重启的情况, 有三个选项, false,unexpected 和 true。如果为 false 的时候, 无论什么情况下, 都不会被重新启动, 如果为 unexpected, 只有当进程的退出码不在下面的 exitcodes 里面定义的 autorestart=false#这个选项是子进程启动多少秒之后, 此时状态如果是 running, 则我们认为启动成功了。默认值为 1startsecs=1#脚本运行的用户身份 user = test#日志输出 stderr_logfile=/tmp/blog_stderr.log stdout_logfile=/tmp/blog_stdout.log #把 stderr 重定向到 stdout, 默认 falseredirect_stderr = true#stdout 日志文件大小, 默认 50MBstdout_logfile_maxbytes = 20MB#stdout 日志文件备份数 stdout_logfile_backups = 20

子进程配置示例:

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

1.4. 进程管理服务命令使用

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

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

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

1.5. 进程管理服务启动应用

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

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

1.6. 进程管理服务进程

1.6.1. 进程管理应用实战-Nginx

supervisor 服务项目创建

为了演示实现 supervisor 服务的功能, 可以临时部署一个 nginx 服务程序, 对 nginx 服务的进程进行监控;

下载安装 nginx 程序包:

yum install -y nginx

supervisor 服务项目配置

修改上面说明的 supervisord.conf 文件, 文件最后两行配置信息的注释取消掉, 也就是去掉分号信息:

[include]files = supervisord.d/*.ini-- 指定需要加载的程序项目配置文件信息
创建一个测试使用的服务配置文件: nginx.ini

[root@Linux supervisord.d]# cat nginx.ini [program:nginx]directory=/usr/sbin/command=/usr/sbin/nginx -g 'daemon off;'autostart=trueautorestart=truestartsecs=3user=rootstderr_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 nginxroot       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 processnginx     13340  13338  0 22:12 ?        00:00:00 nginx: worker processnginx     13341  13338  0 22:12 ?        00:00:00 nginx: worker processnginx     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 nginxroot       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 processnginx     13348  13346  0 22:16 ?        00:00:00 nginx: worker processnginx     13349  13346  0 22:16 ?        00:00:00 nginx: worker processnginx     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.shexport JAVA_HOME=$(dirname $(dirname $(readlink $(readlink $(which javac)))))export PATH=$PATH:$JAVA_HOME/binexport 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@Linux ~]# java -versionopenjdk 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@Linux ~]# javac -versionjavac 1.8.0_352

下载安装 tomcat 程序:

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

supervisor 服务项目配置

修改上面说明的 supervisord.conf 文件, 文件最后两行配置信息的注释取消掉, 也就是去掉分号信息:

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

创建一个测试使用的服务配置文件: nginx.ini

[root@Linux supervisord.d]# cat tomcat.ini [program:tomcat]stopasgroup=trueuser=rootenvironment=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=trueautorestart=truestartsecs=60user=rootstderr_logfile=/usr/local/apache-tomcat-8.5.83/logs/catalina.errstdout_logfile=/usr/local/apache-tomcat-8.5.83/logs/catalina.out

supervisor 服务重新加载

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

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

通过 web 界面查看服务进程运行情况:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/132904.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode做题笔记213. 打家劫舍 II

你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一…

Python基础(第五期): python数据容器(序列) 列表 集合 元素 字符串 字典 序列遍历操作

python基础专栏 python基础(第五期) 文章目录 python基础(第五期)数据容器一、列表1、列表的定义2、列表的下标索引 3、列表的(添加)方法3.1 列表的查询方法3.2 修改特定下标索引的值3.3 列表指定位置插入元素3.3 列表指定元素的追…

【Linux】-文件操作(重定向、缓冲区以及Linux下一切皆文件的详解)

💖作者:小树苗渴望变成参天大树🎈 🎉作者宣言:认真写好每一篇博客💤 🎊作者gitee:gitee✨ 💞作者专栏:C语言,数据结构初阶,Linux,C 动态规划算法🎄 如 果 你 …

电脑监控软件丨2023全网最详细解析

电脑监控软件是一个比较敏感的话题,因为很多员工会觉得电脑监控侵犯了自己的隐私,电脑上企业会觉得安装软件只不过是为了保护自己的核心利益。 对于此,我们要辩证的看待。 今天我们从企业的角度出发,谈谈电脑监控软件的话题。 必…

【python VS vba】(5) 在python中使用xlwt操作Excel(待完善ing)

目录 1 什么是xlwt 2 导入xlwt 3 相关语法 3.1 创建新的workbook 3.2 创建新的sheet 3.3 保存workbook 4 python里表格的形式 4.1 矩阵 4.2 EXCEL的数据形式 完全等于矩阵的数字结构 4.3 python里矩阵 5 具体代码 5.1 代码 5.2 结果 5.3 要注意的问题 5.3.1 不能…

深入理解JVM虚拟机第十八篇:JVM种局部变量表结构的认识

大神链接:作者有幸结识技术大神孙哥为好友,获益匪浅。现在把孙哥视频分享给大家。 孙哥链接:孙哥个人主页 作者简介:一个颜值99分,只比孙哥差一点的程序员 本专栏简介:话不多说,让我们一起干翻JVM 本文章简介:话不多说,让我们讲清楚虚拟机栈存储结构和运行原理 文章目…

NOIP2023模拟12联测33 D. 滈葕

NOIP2023模拟12联测33 D. 滈葕 文章目录 NOIP2023模拟12联测33 D. 滈葕题目大意思路code 题目大意 思路 放一段题解的材料 ABO 血型系统是血型系统的一种,把血液分为 A,B,AB,O 四种血型。血液由红细胞和血清等组成,红细胞表面 有凝集原,血清…

ES6~ES13新特性(二)

文章目录 一、ES71.Array Includes2.指数exponentiation运算符 二、ES81.Object values2.Object entries3.String Padding4.Trailing Commas5.Object Descriptors 三、ES9四、ES101.flat flatMap2.Object fromEntries3.trimStart、trimEnd4.其他知识点 五、ES111.BigInt2.Nulli…

提升ChatGPT答案质量和准确性的方法Prompt engineering实用的prompt灵感和技巧

文章目录 1. 实用的prompt灵感和技巧小技巧常用prompt保存到输入法中普通promptprompt通用公式保存到输入法快捷指令中尝试用英语去写prompt沉浸式翻译软件3. 补充1. 实用的prompt灵感和技巧 解释***,并且给出暗喻/隐喻/类比(解释术语、专业名称,用一个词或短语指出常见的一…

odoo后台启动过程分析之一

odoo后台启动过程分析之一 1、odoo-bin #!/usr/bin/env python3# set server timezone in UTC before time module imported __import__(os).environ[TZ] UTC import odooif __name__ "__main__":odoo.cli.main()这个odoo-bin是一切的起点。 代码很简单 第一步&…

LangChain+LLM实战---Midjourney(v5.1) Prompt深度剖析

原文:Anatomy of Midjourney Promps: In-Depth Study for effective Prompting Strategies — V5.1 examples 作者:Michael King 你是否曾经发现自己盯着Midjourney的空白画布,手指悬停在键盘上,让我问自己:“我应该…

kafka问题汇总

报错1: 解决方式 1、停止docker服务   输入如下命令停止docker服务 systemctl stop docker 或者service docker stop1   停止成功的话,再输入docker ps 就会提示出下边的话: Cannot connect to the Docker daemon. Is the docker daem…

方案分享:F5机器人防御助企业应对复杂攻击

企业是Bot攻击者的目标,网络犯罪分子会不断调整他们的攻击,来攻破愈发成熟的Bot防护,这使企业安全团队时刻处于紧张状态。如果不能有效地管理Bot,应用性能、客户体验和业务都会被影响,但在尝试阻止这些攻击时&#xff…

【PTE-day02 sqlmap操作】

1、sqlmap简介 🍇sqlmap是一个自动化的SQL注入工具,其主要功能是扫描,发现并利用给定的URL进行SQL注入。目前支持的数据库有MySql、Oracle、Access、PostageSQL、SQL Server、IBM DB2、SQLite、Firebird、Sybase和SAP MaxDB等. Sqlmap采用了以下5种独特的SQL注入技术 (1)…

k8s service

文章目录 Service 基础概念Service 类型:Service 的工作流程:东西流量,南北流量NodePortLoadBalancer Service 基础概念 在 Kubernetes(K8s)中,Service 是一个抽象的概念,表示一个应用程序的逻…

计算机毕设 基于大数据的服务器数据分析与可视化系统 -python 可视化 大数据

文章目录 0 前言1 课题背景2 实现效果3 数据收集分析过程**总体框架图****kafka 创建日志主题****flume 收集日志写到 kafka****python 读取 kafka 实时处理****数据分析可视化** 4 Flask框架5 最后 0 前言 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升&a…

【docker windows安装】

参考 博客1、博客2、博客3.

fio数据整理之二

fio数据简单抓取 上文我们完成了一些fio output数据的简单抓取,本文将针对抓取的数据做进一步的处理,输出到表格之中,方便我们查看,统计结果。 本文先使用最简单的方法创建csv档案 我们现有个基本认知,在csv档案中&am…

【星海出品】VUE(六)

插槽Slots 传递属性 attribute App,vue <script> import SlotsBase from "./components/SlotsBase.vue" import SlotsTow from "./components/SlotsTow.vue" export default {components:{SlotsBase,SlotsTow},data(){return{message: "父集 m…

Corel VideoStudio 会声会影2024剪辑中间的视频怎么删 剪辑中音乐太长怎么办

我很喜欢视频剪辑软件Corel VideoStudio 会声会影2024&#xff0c;因为它使用起来很有趣。它很容易使用&#xff0c;但仍然给你很多功能和力量。视频剪辑软件Corel VideoStudio 会声会影2023让我与世界分享我的想法&#xff01;“这个产品的功能非常多&#xff0c;我几乎没有触…