首页 > 其他分享 >什么是supervisor?

什么是supervisor?

时间:2023-02-19 13:01:28浏览次数:30  
标签:supervisor supervisord 程序 什么 supervisorctl supervisor1 logfile

supervisor是什么

supervisor是用python语言编写的,只能用于类Unix系统上的进程管理工具。

supervisor有什么用

举一个常见的场景,比如你的项目已经到了测试联调阶段,QA需要你把程序启动起来,然后进行测试,那么启动二进制文件最常用的运行命令是./二进制 &,这样可以使得程序在后台运行,即时关闭当前终端,也不会使程序终止。运行成功后,你开开心心的找女朋友约会去了,QA一顿猛如虎的操作,把程序搞挂了,打电话给你,需要你重启一下程序。此时你左手拿着电话,右手牵着女朋友的手,在心里问候了QA的家人 在这里插入图片描述 为了不让女朋友生气,supervisor来了,它能够简单且高效地启动、重启、终止程序的运行,并且它能够检测程序是否正常运行,并且在程序挂掉后自动重启,并且还能把日志(err log,warning log)输出到指定位置,能够捕捉到QA遗漏的问题。

supervisor的组成

supervisor是由两个组件组成的,supervisordsupervisorctl

supervisord

当我们启动supervisor时,会启动一个父进程supervisord,所有由它管理的进程都成为它的子进程,supervisord统一管理这些子进程的启动、重启和终止。

supervisorctl

这是一个命令行管理工具,输入某些命令,如:start、stop、restart、status等,就可以对指定的子进程进行相应的操作了。

小结

可以这样简单理解起来,supervisord和supervisorctl理解成server和client。通过supervisorctl这个client接收命令,supervisord这个server对命令进行处理和响应。

安装supervisor

macOS:brew install supervisor
linux:pip install supervisor

安装完成后,得到的了如下3个二进制的命令:

echo_supervisor_conf: 将supervisor相关的所有配置打印出来。

supervisord:启动supervisor命令。

supervisorctl:管理我们托管在supervisor中的进程。

启动supervisor

systemctl start supervisord;
systemctl enable supervisord;

配置文件

[unix_http_server]
file=/run/supervisor.sock   ; (the path to the socket file)

[supervisord]
logfile=/var/log/supervisor/supervisord.log  ; (main log file;default $CWD/supervisord.log)
logfile_maxbytes=50MB       ; (max main logfile bytes b4 rotation;default 50MB)
logfile_backups=10          ; (num of main logfile rotation backups;default 10)
loglevel=info               ; (log level;default info; others: debug,warn,trace)
pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
nodaemon=false              ; (start in foreground if true;default false)
minfds=1024                 ; (min. avail startup file descriptors;default 1024)
minprocs=200                ; (min. avail process descriptors;default 200)

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///run/supervisor.sock ; use a unix:// URL  for a unix socket

[include]
files = supervisord.d/*.ini

上面的配置文件,只截取了比较关键的几部分。需要注意三点:

  1. linux中的程序启动之后,会有个对应的socket文件。supervisord启动之后这个socket文件位置通过[unix_http_server]中的file指定。而且supervisorctl命令需要和supervisord在本地基于socket文件交互,所以[supervisorctl]中serverurl要和[unix_http_server]中的file保持同步。
  2. 上面这个配置文件[include]部分,它会加载supervisord.d/目录下所有的*.ini文件
  3. 在/etc目录下创建supervisor.d文件夹,用于存放.ini文件

.ini文件的作用就是:你想将程序A托付给supervisor管理,那就按要求的格式,为程序A创建一个A.ini配置文件,在这个文件中定义好,程序A的二进制文件在哪里、执行啥命令启动程序A、日志文件在哪等等。

下面是一个自定义.ini文件的示例

[program:supervisor1]
;supervisor1是自定义的项目名称,之后通过supervisorclt命令管理supervisor1
;command 启动程序的相对路径
command=/home/worker/workerspace/supervisor1.sh 
numprocs=1                                  
;directory 在执行command之前,需要切换到哪个目录中
directory=/home/worker/workerspace/  
;supervisord启动时,是否同时启动
autostart=true        
;autorestart意外退出后,是否重新启动
autorestart=true      
startsecs=30          
startretries=3        
exitcodes=0,2        
stopsignal=QUIT      
stopwaitsecs=10       
;user 使用哪个用户启动本程序
user=worker             
;redirect_stderr将标准错误,重定向到标准输出
redirect_stderr=true  
;stdout_logfile 标准输出的日志文件的位置
stdout_logfile=/home/worker/workerspace/supervisor1.stdout.log 
stdout_logfile_maxbytes=64MB
stdout_logfile_backups=5                             
stdout_capture_maxbytes=1MB  
stdout_events_enabled=false   

supervisor的命令行

;有新的ini文件被添加进来时需要更新
supervisorctl update
;查看托管的全部进程或单个进程
supervisorctl status  [supervisor1]
supervisor1 RUNNING
;终止某个进程
supervisorctl stop supervisor1
supervisor1: stopped
;启动某个进程
supervisorctl start supervisor1
supervisor1: started
;重启某个进程
supervisorctl restart supervisor1
; 重新启动配置文件中所有进程
supervisorctl reload
Restarted supervisord

配置完成这些,你就可以放心的跟女朋友约会了,程序挂掉之后,supervisor会帮你重新启动。

欢迎关注 晴天码字,晴天会持续输出使用且有趣的文章

supervisor是什么

supervisor是用python语言编写的,只能用于类Unix系统上的进程管理工具。

supervisor有什么用

举一个常见的场景,比如你的项目已经到了测试联调阶段,QA需要你把程序启动起来,然后进行测试,那么启动二进制文件最常用的运行命令是./二进制 &,这样可以使得程序在后台运行,即时关闭当前终端,也不会使程序终止。运行成功后,你开开心心的找女朋友约会去了,QA一顿猛如虎的操作,把程序搞挂了,打电话给你,需要你重启一下程序。此时你左手拿着电话,右手牵着女朋友的手,在心里问候了QA的家人 在这里插入图片描述 为了不让女朋友生气,supervisor来了,它能够简单且高效地启动、重启、终止程序的运行,并且它能够检测程序是否正常运行,并且在程序挂掉后自动重启,并且还能把日志(err log,warning log)输出到指定位置,能够捕捉到QA遗漏的问题。

supervisor的组成

supervisor是由两个组件组成的,supervisordsupervisorctl

supervisord

当我们启动supervisor时,会启动一个父进程supervisord,所有由它管理的进程都成为它的子进程,supervisord统一管理这些子进程的启动、重启和终止。

supervisorctl

这是一个命令行管理工具,输入某些命令,如:start、stop、restart、status等,就可以对指定的子进程进行相应的操作了。

小结

可以这样简单理解起来,supervisord和supervisorctl理解成server和client。通过supervisorctl这个client接收命令,supervisord这个server对命令进行处理和响应。

安装supervisor

macOS:brew install supervisor
linux:pip install supervisor

安装完成后,得到的了如下3个二进制的命令:

echo_supervisor_conf: 将supervisor相关的所有配置打印出来。

supervisord:启动supervisor命令。

supervisorctl:管理我们托管在supervisor中的进程。

启动supervisor

systemctl start supervisord;
systemctl enable supervisord;

配置文件

[unix_http_server]
file=/run/supervisor.sock   ; (the path to the socket file)

[supervisord]
logfile=/var/log/supervisor/supervisord.log  ; (main log file;default $CWD/supervisord.log)
logfile_maxbytes=50MB       ; (max main logfile bytes b4 rotation;default 50MB)
logfile_backups=10          ; (num of main logfile rotation backups;default 10)
loglevel=info               ; (log level;default info; others: debug,warn,trace)
pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
nodaemon=false              ; (start in foreground if true;default false)
minfds=1024                 ; (min. avail startup file descriptors;default 1024)
minprocs=200                ; (min. avail process descriptors;default 200)

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///run/supervisor.sock ; use a unix:// URL  for a unix socket

[include]
files = supervisord.d/*.ini

上面的配置文件,只截取了比较关键的几部分。需要注意三点:

  1. linux中的程序启动之后,会有个对应的socket文件。supervisord启动之后这个socket文件位置通过[unix_http_server]中的file指定。而且supervisorctl命令需要和supervisord在本地基于socket文件交互,所以[supervisorctl]中serverurl要和[unix_http_server]中的file保持同步。
  2. 上面这个配置文件[include]部分,它会加载supervisord.d/目录下所有的*.ini文件
  3. 在/etc目录下创建supervisor.d文件夹,用于存放.ini文件

.ini文件的作用就是:你想将程序A托付给supervisor管理,那就按要求的格式,为程序A创建一个A.ini配置文件,在这个文件中定义好,程序A的二进制文件在哪里、执行啥命令启动程序A、日志文件在哪等等。

下面是一个自定义.ini文件的示例

[program:supervisor1]
;supervisor1是自定义的项目名称,之后通过supervisorclt命令管理supervisor1
;command 启动程序的相对路径
command=/home/worker/workerspace/supervisor1.sh 
numprocs=1                                  
;directory 在执行command之前,需要切换到哪个目录中
directory=/home/worker/workerspace/  
;supervisord启动时,是否同时启动
autostart=true        
;autorestart意外退出后,是否重新启动
autorestart=true      
startsecs=30          
startretries=3        
exitcodes=0,2        
stopsignal=QUIT      
stopwaitsecs=10       
;user 使用哪个用户启动本程序
user=worker             
;redirect_stderr将标准错误,重定向到标准输出
redirect_stderr=true  
;stdout_logfile 标准输出的日志文件的位置
stdout_logfile=/home/worker/workerspace/supervisor1.stdout.log 
stdout_logfile_maxbytes=64MB
stdout_logfile_backups=5                             
stdout_capture_maxbytes=1MB  
stdout_events_enabled=false   

supervisor的命令行

;有新的ini文件被添加进来时需要更新
supervisorctl update
;查看托管的全部进程或单个进程
supervisorctl status  [supervisor1]
supervisor1 RUNNING
;终止某个进程
supervisorctl stop supervisor1
supervisor1: stopped
;启动某个进程
supervisorctl start supervisor1
supervisor1: started
;重启某个进程
supervisorctl restart supervisor1
; 重新启动配置文件中所有进程
supervisorctl reload
Restarted supervisord

配置完成这些,你就可以放心的跟女朋友约会了,程序挂掉之后,supervisor会帮你重新启动。

欢迎关注 晴天码字,晴天会持续输出使用且有趣的文章

在这里插入图片描述

标签:supervisor,supervisord,程序,什么,supervisorctl,supervisor1,logfile
From: https://blog.51cto.com/u_15855860/6066699

相关文章

  • mybatis中#{}和${}有什么区别
    {}是预编译处理,是占位符;${}是字符串替换、是拼接符。mybatis在处理#{}时,会将sql中的#{}替换为?,调用PreparedStatement来赋值,可以有效防止SQL注入。在处理${}时,就是简单将$......
  • 什么是JWT
    什么是JWTJWT(jsonwebtoken)要说JWT是什么,先谈谈没有JWT的时候是怎么进行身份验证的呢?通常会用到session客户端登陆服务器填写用户名密码服务器验证身份保存一个se......
  • 多线程lock 为什么要lock,lock了什么?
    一.为什么要lock,lock了什么?当我们使用线程的时候,效率最高的方式当然是异步,即各个线程同时运行,其间不相互依赖和等待。但当不同的线程都需要访问某个资源的时候,就需要同步......
  • 目标检测究竟发展到了什么程度? | 聊一聊目标检测发展的这22年
    前言本文将对目标检测领域的发展做一个系统性的介绍,旨在为读者构建一个完整的知识体系架构,同时了解目标检测相关的技术栈及其未来的发展趋势。本文转载自CVHub作者......
  • 前端日常一问:说说你对浏览器缓存的理解,什么是强缓存和弱缓存,项目部署的时候需要注意的
    前言浏览器缓存是提高网站性能的重要手段之一,通过合理的缓存策略,可以降低服务器负担,减少网络请求次数,加快页面加载速度,提升用户体验。本文将介绍如何优化浏览器缓存策略,以......
  • 为什么子进程要继承处理器亲缘性?
    请先考虑一个典型的程序为什么需要启动一个子进程。(当然资源管理器不算一个典型的程序)这是因为手头的任务被分解为子任务,无论出于何种原因,这些子任务都被放入子流程中。......
  • 相机出图画面一半清晰,一半模糊的原因是什么?
    1、问题背景:在做项目的过程中,有遇到过几次,出图后画面是一半清晰,一半模糊的现象,再重新对焦也是一样。但换了个镜头后就好了,这应该是镜头的质量问题,但导致镜头出现这种问题的......
  • 第一章 对程序员来说CPU是什么
        章节标题下方有几个问题,看完后便对第一章的内容有了大概的了解。第一章观后感想:    第一章解释了CPU是什么,CPU相当于计算机的大脑,它的内部由数百万......
  • 有什么区别 new 和 malloc() ?
    malloc()是一个以数字(字节)作为参数的函数;它返回一个void*指向单元化存储。new是一个运算符,它接受一个类型和(可选)该类型的一组初始值设定项作为它的论点;它返回一个......
  • 创投综艺天花板《我要投资4》到底是一种什么样的存在?
    作者|孔潇上个月,由湖南湘江新区(长沙高新区)主办、湘江基金小镇·麓谷基金广场承办及天际汽车独家冠名的《我要投资》第四季完美收官。这档“人均八百个心眼子的创投综艺”,一......