supervisor简介

news2024/9/30 19:33:34

1、概述

supervisor是一个用python语言编写的进程管理工具,它可以很方便的监听、启动、停止、重启一个或多个进程。当一个进程意外被杀死,supervisor监听到进程死后,可以很方便的让进程自动恢复,不再需要程序员或系统管理员自己编写代码来控制。

2、架构:三大构成要素

  • supervisord

.supervisor的服务端:运行supervisor时会启动一个进程supervisord,它负责启动所管理的进程,并将所管理的进程作为自己的子进程来启动,而且可以在所管理的进程出现崩溃时自动重启

  • supervisorctl
    supervisor的客户端:supervisorctl是命令行管理工具,可以用命令来进行子进程的管理,supervisorctl常见命令

  • echo_supervisord_conf
    默认的配置文件,一般生成默认文件为 supervisor.conf

3、安装

3.1、supervisor是基于python写的,所以使用pip来安装即可。
pip install supervisor
3.2、默认生成的几个地址需要我们关注

# supervisord 路径
/usr/local/bin/supervisord
# supervisorctl 路径
/usr/local/bin/supervisorctl
# echo_supervisord_conf 路径
/usr/local/bin/echo_supervisord_conf

如上路径,我们也可以通过whereis supervisord、whereis supervisorctl、whereis echo_supervisord_conf得到
3.3、验证是否安装成功
supervisorctl --help

4、配置

4.1、创建 /etc/supervisor 目录
mkdir /etc/supervisor

4.2、创建并修改supervisord.conf文件
echo_supervisord_conf > /etc/supervisor/supervisord.conf
vi /etc/supervisor/supervisord.conf

# 将unix_http_server 下的 file 路径改成如下内容
[unix_http_server] 
file=/var/run/supervisor.sock  ; (the path to the socket file)
# 将supervisord 下的logfile 路径 和 pidfile 路径改成如下内容
[supervisord]
logfile=/var/log/supervisor/supervisord.log ; (main log file; default $CWD/supervisord.log)
pidfile=/var/run/supervisord.pid ; (supervisord pidfile; default supervisord.pid)
[supervisorctl] 
serverurl=unix:///var/run/supervisor.sock ; (use a unix:// URL  for a unix socket)
# 将include 取消注释并将其下的 files 路径改成如下内容。标记着supervisor将会默认运行/etc/supervisor/conf.d的所有conf配置文件
[include]
files = /etc/supervisor/conf.d/*.conf

注:上面的路径只是推荐路径,你也可以根据自己的想法,指向不同路径
4.3、创建并添加文件权限(上文提到的)

# 创建文件
#touch /var/run/supervisor.sock  # 依据配置文件自动创建

mkdir /var/log/supervisor
touch /var/log/supervisor/supervisord.log

#touch /var/run/supervisord.pid  # 依据配置文件自动创建
mkdir /etc/supervisor/conf.d
# 添加权限
#chmod 777 /var/run 
#chmod 777 /var/log

4.4、配置supervisor开机自动启动服务(非必须,按需选择)
4.4.1、编辑文件(一般自带,不需要配置)
vim /usr/lib/systemd/system/supervisord.service
supervisord.service 文件内容如下:

[Unit] 
Description=Supervisor daemon 
[Service] 
Type=forking ExecStart=/usr/local/bin/supervisord -c /etc/supervisor/supervisord.conf 
ExecStop=/usr/local/bin/supervisorctl shutdown 
ExecReload=/usr/local/bin/supervisorctl reload 
KillMode=process Restart=on-failure 
RestartSec=42s 
[Install] 
WantedBy=multi-user.target

4.4.2、使能服务
systemctl enable supervisord
4.4.3、验证是否使能成功

  • 方法一,出现enable说明成功
    systemctl is-enabled supervisord
  • 方法二,开关机验证

注:supervisor常用命令

5、如何配置新服务并系统控制?

假设服务名称为test。启动文件为py类文件entry.py
5.1、创建test.conf并编辑配置文件vi /etc/supervisor/conf.d/test.conf

[program:test]  # 服务名称test
directory = /home/test_project        # 项目路径,项目运行前,会先切换到这个目录
command= /home/test_project/entry.py  # 程序入口主文件绝对路径 
autostart=true                        # 如果是true的话,子进程将在supervisord启动后被自动启动,默认就是true 
autorestart=true                      # 子进程挂掉后自动重启的情况,有三个选项,false,unexpected和true。false表示无论什么情况下,都不会被重新启动;unexpected表示只有当进程的退出码不在下面的exitcodes里面定义的退出码的时候,才会被自动重启。当为true的时候,只要子进程挂掉,将会被无条件的重启 
user=root                             # root用户执行 
redirect_stderr=true                  # 将stderr重定向stdout,默认false,与stderr_logfile互斥
startsecs = 5                         # 子进程启动多少秒之后,此时状态如果是running,我们认为启动成功了,默认值1
startretries=5                        # 当进程启动失败后,最大尝试的次数。当超过5次后,进程的状态变为FAIL
stdout_logfile = None                 # 正常日志输出文件,None表示不输出
stderr_logfile = None                 # 错误日志输出文件,None表示不输出

5.2、使用supervisorctl客户端查看程序启动的状态前需要先启动supervisor服务(使用supervisord)

supervisord -c /etc/supervisor/supervisord.conf  # 启动supervisor服务
# 如果出现
supervisorctl -c /etc/supervisor/supervisord.conf status  # 查看程序启动的状态

6、便捷

6.1、如上所示,下载supervisor后,启动项目需要以下几个步骤:

  1. 编辑supervisor配置文件,如supervisord.conf
  2. 创建文件夹及文件,如文件夹/var/log/supervisor、/etc/supervisor/conf.d,文件/var/run/supervisor.sock等
  3. 赋值权限,如chmod 777 /var/run
  4. 编辑程序配置文件,如/etc/supervisor/conf.d/test.conf
  5. 启动,如supervisord -c /etc/supervisor/supervisord.conf

而此时是有一个更好的方法,将①④合到一处。①中只关注重要的一些选项。④中照搬即可
vi /etc/supervisor/conf.d/test.conf

[unix_http_server]
file=/var/run/supervisor.sock  ; (the path to the socket file)
[supervisord]
logfile=/var/log/supervisor/supervisord.log ; (main log file; default $CWD/supervisord.log)
pidfile=/var/run/supervisord.pid ; (supervisord pidfile; default supervisord.pid)
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///var/run/supervisor.sock ; (use a unix:// URL  for a unix socket)
[include]
files = /etc/supervisor/conf.d/*.conf

[program:test]  # 服务名称test
directory = /home/test_project        # 项目路径,项目运行前,会先切换到这个目录
command= /home/test_project/entry.py  # 程序入口主文件绝对路径 
autostart=true                        # 如果是true的话,子进程将在supervisord启动后被自动启动,默认就是true 
autorestart=true                      # 子进程挂掉后自动重启的情况,有三个选项,false,unexpected和true。false表示无论什么情况下,都不会被重新启动;unexpected表示只有当进程的退出码不在下面的exitcodes里面定义的退出码的时候,才会被自动重启。当为true的时候,只要子进程挂掉,将会被无条件的重启 
user=root                             # root用户执行 
redirect_stderr=true                  # 将stderr重定向stdout,默认false,与stderr_logfile互斥
startsecs = 5                         # 子进程启动多少秒之后,此时状态如果是running,我们认为启动成功了,默认值1
startretries=5                        # 当进程启动失败后,最大尝试的次数。当超过5次后,进程的状态变为FAIL
stdout_logfile = None                 # 正常日志输出文件,None表示不输出
stderr_logfile = None                 # 错误日志输出文件,None表示不输出

6.2、此时需要做的步骤

  1. 编辑系统配置文件与程序配置文件,6.1中已配置完毕
  2. 创建文件夹及文件,参考上文
  3. 赋值权限,参考上文
  4. 启动,此时的启动命令就由原来的supervisord -c /etc/supervisor/supervisord.conf变为现在的supervisord -c /etc/supervisor/conf.d/test.conf

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

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

相关文章

回调函数(callback)是什么?一文理解回调函数(callback)

这里写目录标题 一、什么是回调函数1.1、回调函数的定义和基本概念1.2、回调函数的作用和使用场景 二、回调函数的实现方法2.1、函数指针2.2、函数对象/functor2.3、匿名函数/lambda表达式 三、回调函数的应用举例四、回调函数的优缺点五、回调函数与其他编程概念的关系5.1、回…

性能提升30%!袋鼠云数栈基于 Apache Hudi 的性能优化实战解析

Apache Hudi 是一款开源的数据湖解决方案,它能够帮助企业更好地管理和分析海量数据,支持高效的数据更新和查询。并提供多种数据压缩和存储格式以及索引功能,从而为企业数据仓库实践提供更加灵活和高效的数据处理方式。 在金融领域&#xff0…

Mysql高阶语句(一)

Mysql高阶语句(一) 一、MySQL高级进阶SQL 语句1、SELECT斜体样式2、DISTINCT3、WHERE4、AND、OR5、IN6、BETWEEN7、通配符、LIKE8、ORDER BY9、| | 连接符10、GROUP BY11、HAVING 二、函数1、数学函数2、聚合函数3、字符串函数4、日期时间函数 一、MySQL…

短视频矩阵源码

短视频矩阵源码的开发部署其实并不难,主要依托于抖音平台各种开放权限进行研发,市面上常见的源码功能构建也是大同小异,主要处理还在于细节及产品优化上。 如: 1. 视频制作板块,文字转语音功能,当然各种云&…

【人工智能技术专题】「入门到精通系列教程」零基础带你进军人工智能领域的全流程技术体系和实战指南(NLP、GPT-Pre-Training和数据标注都是什么)

零基础带你进军人工智能领域的全流程技术体系和实战指南(NLP、GPT-Pre-Training和数据标注都是什么) 前言专栏介绍专栏说明学习大纲前提条件面向读者学习目标核心内容NLP自然话言理解指的是什么定义概念涉及到的领域技术与应用关系 重要性语言结构剖析分…

AI已在职场大规模应用,求职者被要求熟练使用ChatGPT

“能熟练使用ChatGPT、Midjourney等AI软件生产高质量文图内容完成辅助工作。”当这条岗位要求悄然出现在今夏的应聘季,时光仿佛被拉回到数十年前,那个要求“会使用Word、Excel等计算机软件”的求职年代。 彼时,因为计算机的逐渐普及&#xf…

Linux服务器Jenkins部署打包Android

程序猿日常 记Jenkins部署打包Android介绍 Jenkins 自动打包 Android 应用,后面介绍打包Flutter应用,然后介绍打包Android原生Flutter混合应用 准备工作 1.jenkins服务器地址 账户密码 2.项目git地址 访问账号密码 3.ssh 链接服务器账户密码 安装An…

【Java高级语法】(十)面向对象:掀开Java 的面向对象盖章时代,一起来发现OOP的有趣编程秘密!~

Java高级语法详解之面向对象 1️⃣ 类和对象2️⃣ 三大特性2.1 封装(Encapsulation)2.2 继承(Inheritance)2.3 多态(Polymorphism) 3️⃣ 面向对象编程(OOP)和面向过程编程(PP)4️⃣ 方法重载和方法重写🔍 小结&#x…

MySQL高级SQL语句操作一

MySQL高级SQL语句操作 一、准备环境二、常用操作三、通配符与like1、通配符2、like 四、ORDER BY五、函数1、数学函数2、聚合函数3、字符串函数 六、GROUP BY七、HAVING八、别名(字段別名 、表格別名)九、子查询(连接表格) 一、准…

记录--前端实现文件预览(pdf、excel、word、图片)

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前端实现文件预览功能 需求:实现一个在线预览pdf、excel、word、图片等文件的功能。 介绍:支持pdf、xlsx、docx、jpg、png、jpeg。 以下使用Vue3代码实现所有功能,建…

管理类联考——英语——趣味篇——不择手段——a开头单词

本书分为两个部分。第一部分是核心词汇的讲解,借助谐音、联想、编故事、词根词缀、举例、图画等手段,为每个单词找到它存在的语境,基本上可以让你做到过目不忘。在这一部分中,单词被划分为20个单元,同学们可以每天搞定…

Vue全家桶(五):Vue3快速上手

目录 1.Vue3简介2.Vue3带来了什么2.1 性能的提升2.2 源码的升级2.3 拥抱TypeScript2.4 新的特性 3. 创建Vue3.0工程3.1 使用 vue-cli 创建3.2 使用 vite 创建3.3 Vue3的初始化工程 4. Composition API介绍4.1 Composition API 的优势4.1.1 Options API 存在的问题4.1.2 Composi…

基于STM32 ARM+FPGA的电能质量分析仪方案(一)硬件设计

本章主要给出了本系统的设计目标和硬件设计方案,后面详细介绍了硬件电路的设计 过程,包括数据采集板、 FPGAARM 控制板。 3.1系统设计目标 本系统的主要目的是实现电能质量指标的高精度测量和数据分析,其具体技术指标如 下所示&#xff1…

C++指针对象和异常(12)

异常(exception) 为什么有异常 异常在C用于错误处理,C语言中一般使用返回值表示错误,C对错误处理进行了扩展,统一使用异常机制来处理程序中发生的错误。 C的异常处理包括两个部分 ----- 抛出异常和捕获异常,如果抛出的异常被捕…

​LeetCode解法汇总LCP 41. 黑白翻转棋

目录链接: 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目: https://github.com/September26/java-algorithms 原题链接:力扣 描述: 在 n*m 大小的棋盘中,有黑白两种棋子,黑棋记作字母 &quo…

想去除List重复元素?我有两种方法搞定,赶紧拿去用

关注“Java架构栈”微信公众号,回复暗号【Java面试题】即可获取大厂面试题 问题背景 最近就有很多小伙伴在后台私信波哥,问波哥这样一个问题:“波哥,我最近正在找工作,被面试官问到List该怎么去重?我感觉自…

命令执行测试-业务安全测试实操(12)

命令执行测试 测试原理和方法 在应用需要调用一些外部程序去处理内容的情况下,就会用到一些执行系统命令的承数。如PHP中的svstem、exec、shell exec等,当用户可以控制命令执行函数中的参数时,将可注入恶意系统命令到正常命令中,造成命令执行攻击。测试中如果没有对参数(如…

Lowe‘s EDI 项目数据库方案开源介绍

近期为了帮助广大用户更好地使用 EDI 系统,我们根据以往的项目实施经验,将成熟的 EDI 项目进行开源。用户安装好知行之桥EDI系统之后,只需要下载我们整理好的示例代码,并放置在知行之桥指定的工作区中,即可开始使用。 …

Flutter如何使用mvi? bloc结合自定义http库的实现

文章目录 前言一、先看看如何使用bloc吧1. 定义页面需要的数据2. 定义通用加载状态3. 定义事件4. 定义bloc5. 定义UI6. 使用 二、lib_http1. request定义2. response定义3. 适配器接口4. 构建adapter需要的数据5. 网络异常统一封装6. 核心请求类7. 提供网络访问配置8. dio适配器…