Linux 之 supervisor安装和使用

news2024/12/25 12:26:37

Supervisor 官网

一、介绍

Supervisor有四个组件:

1. supervisord

运行Supervisor的后台服务,它用来启动和管理那些你需要Supervisor管理的子进程,响应客户端发来的请求,重启意外退出的子进程,将子进程的stdout和stderr写入日志,响应事件等。它是Supervisor最核心的部分。

2. supervisorctl

相当于supervisord的客户端,它是一个命令行工具,用户可以通过它向supervisord服务发指令,比如查看子进程状态,启动或关闭子进程。它可以连接不同的supervisord服务,包括远程机上的服务。

3. Web服务器

这是supervisord的Web客户端,用户可以在Web页面上完成类似于supervisorctl的功能。

4. XML-RPC接口

这是留给第三方集成的接口,你的服务可以在远程调用这些XML-RPC接口来控制supervisord管理的子进程。上面的Web服务器其实也是通过这个XML-RPC接口实现的。

二、安装

1、pip 安装

	pip3 install supervisor

2、easy_install 安装:

	yum install python-setuptools
	easy_install supervisor

3、centos 安装:

	yum update
	yum install -y epel-release
	yum install -y supervisor

4、Debian/Ubuntu 安装 (我的是这个)

	apt-get install supervisor

注意,安装后配置文件生成:

1、通过easy_install或pip安装后, 没有supervisor的配置文件

	 mkdir /etc/supervisor
	 echo_supervisord_conf > /etc/supervisor/supervisord.conf

2、使用 apt-get 安装后,supervisor的主配置文件在:

	 # 主进程配置文件
	 /etc/supervisor/supervisord.conf 
	
	 # 子进程配置文件, ini or conf 均可, 只要和主进程文件配置保持一致 均可
	/etc/supervisor/conf.d/*ini  or /etc/supervisor/conf.d/*conf 
	
	# 这句执行不执行都可以,因为本身也有该文件。 下面我会附加 supervisord.conf(主进程设置)
	 echo_supervisord_conf > /etc/supervisor/supervisord.conf

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

; Sample supervisor config file.
;
; For more information on the config file, please see:
; http://supervisord.org/configuration.html
;
; Notes:
;  - Shell expansion ("~" or "$HOME") is not supported.  Environment
;    variables can be expanded using this syntax: "%(ENV_HOME)s".
;  - Quotes around values are not supported, except in the case of
;    the environment= options as shown below.
;  - Comments must have a leading space: "a=b ;comment" not "a=b;comment".
;  - Command will be truncated if it looks like a config file comment, e.g.
;    "command=bash -c 'foo ; bar'" will truncate to "command=bash -c 'foo ".
;
; Warning:
;  Paths throughout this example file use /tmp because it is available on most
;  systems.  You will likely need to change these to locations more appropriate
;  for your system.  Some systems periodically delete older files in /tmp.
;  Notably, if the socket file defined in the [unix_http_server] section below
;  is deleted, supervisorctl will be unable to connect to supervisord.

[unix_http_server]
file=/var/run/supervisor.sock   ; the path to the socket file
;chmod=0700                 ; socket file mode (default 0700)
;chown=nobody:nogroup       ; socket file uid:gid owner
;username=user              ; default is no username (open server)
;password=123               ; default is no password (open server)

; Security Warning:
;  The inet HTTP server is not enabled by default.  The inet HTTP server is
;  enabled by uncommenting the [inet_http_server] section below.  The inet
;  HTTP server is intended for use within a trusted environment only.  It
;  should only be bound to localhost or only accessible from within an
;  isolated, trusted network.  The inet HTTP server does not support any
;  form of encryption.  The inet HTTP server does not use authentication
;  by default (see the username= and password= options to add authentication).
;  Never expose the inet HTTP server to the public internet.

[inet_http_server]         ; inet (TCP) server disabled by default
port=*:9001        ; ip_address:port specifier, *:port for all iface
username=admin            ; default is no username (open server)
password=123456             ; default is no password (open server)

[supervisord]
logfile=/var/log/supervisord.log ; main log file; default $CWD/supervisord.log
logfile_maxbytes=50MB        ; max main logfile bytes b4 rotation; default 50MB
logfile_backups=10           ; # of main logfile backups; 0 means none, 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
silent=false                 ; no logs to stdout if true; default false
minfds=1024                  ; min. avail startup file descriptors; default 1024
minprocs=200                 ; min. avail process descriptors;default 200
;umask=022                   ; process file creation umask; default 022
;user=supervisord            ; setuid to this UNIX account at startup; recommended if root
;identifier=supervisor       ; supervisord identifier, default is 'supervisor'
;directory=/tmp              ; default is not to cd during start
;nocleanup=true              ; don't clean up tempfiles at start; default false
;childlogdir=/tmp            ; 'AUTO' child log dir, default $TEMP
;environment=KEY="value"     ; key value pairs to add to environment
;strip_ansi=false            ; strip ansi escape codes in logs; def. false

; The rpcinterface:supervisor section must remain in the config file for
; RPC (supervisorctl/web interface) to work.  Additional interfaces may be
; added by defining them in separate [rpcinterface:x] sections.

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

; The supervisorctl section configures how supervisorctl will connect to
; supervisord.  configure it match the settings in either the unix_http_server
; or inet_http_server section.

[supervisorctl]
serverurl=unix:///var/run/supervisor.sock ; use a unix:// URL  for a unix socket
;serverurl=http://127.0.0.1:9001 ; use an http:// url to specify an inet socket
;username=chris              ; should be same as in [*_http_server] if set
;password=123                ; should be same as in [*_http_server] if set
;prompt=mysupervisor         ; cmd line prompt (default "supervisor")
;history_file=~/.sc_history  ; use readline history if available

; The sample program section below shows all possible program subsection values.
; Create one or more 'real' program: sections to be able to control them under
; supervisor.

;[program:theprogramname]
;command=/bin/cat              ; the program (relative uses PATH, can take args)
;process_name=%(program_name)s ; process_name expr (default %(program_name)s)
;numprocs=1                    ; number of processes copies to start (def 1)
;directory=/tmp                ; directory to cwd to before exec (def no cwd)
;umask=022                     ; umask for process (default None)
;priority=999                  ; the relative start priority (default 999)
;autostart=true                ; start at supervisord start (default: true)
;startsecs=1                   ; # of secs prog must stay up to be running (def. 1)
;startretries=3                ; max # of serial start failures when starting (default 3)
;autorestart=unexpected        ; when to restart if exited after running (def: unexpected)
;exitcodes=0                   ; 'expected' exit codes used with autorestart (default 0)
;stopsignal=QUIT               ; signal used to kill process (default TERM)
;stopwaitsecs=10               ; max num secs to wait b4 SIGKILL (default 10)
;stopasgroup=false             ; send stop signal to the UNIX process group (default false)
;killasgroup=false             ; SIGKILL the UNIX process group (def false)
;user=chrism                   ; setuid to this UNIX account to run the program
;redirect_stderr=true          ; redirect proc stderr to stdout (default false)
;stdout_logfile=/a/path        ; stdout log path, NONE for none; default AUTO
;stdout_logfile_maxbytes=1MB   ; max # logfile bytes b4 rotation (default 50MB)
;stdout_logfile_backups=10     ; # of stdout logfile backups (0 means none, default 10)
;stdout_capture_maxbytes=1MB   ; number of bytes in 'capturemode' (default 0)
;stdout_events_enabled=false   ; emit events on stdout writes (default false)
;stdout_syslog=false           ; send stdout to syslog with process name (default false)
;stderr_logfile=/a/path        ; stderr log path, NONE for none; default AUTO
;stderr_logfile_maxbytes=1MB   ; max # logfile bytes b4 rotation (default 50MB)
;stderr_logfile_backups=10     ; # of stderr logfile backups (0 means none, default 10)
;stderr_capture_maxbytes=1MB   ; number of bytes in 'capturemode' (default 0)
;stderr_events_enabled=false   ; emit events on stderr writes (default false)
;stderr_syslog=false           ; send stderr to syslog with process name (default false)
;environment=A="1",B="2"       ; process environment additions (def no adds)
;serverurl=AUTO                ; override serverurl computation (childutils)

; The sample eventlistener section below shows all possible eventlistener
; subsection values.  Create one or more 'real' eventlistener: sections to be
; able to handle event notifications sent by supervisord.

;[eventlistener:theeventlistenername]
;command=/bin/eventlistener    ; the program (relative uses PATH, can take args)
;process_name=%(program_name)s ; process_name expr (default %(program_name)s)
;numprocs=1                    ; number of processes copies to start (def 1)
;events=EVENT                  ; event notif. types to subscribe to (req'd)
;buffer_size=10                ; event buffer queue size (default 10)
;directory=/tmp                ; directory to cwd to before exec (def no cwd)
;umask=022                     ; umask for process (default None)
;priority=-1                   ; the relative start priority (default -1)
;autostart=true                ; start at supervisord start (default: true)
;startsecs=1                   ; # of secs prog must stay up to be running (def. 1)
;startretries=3                ; max # of serial start failures when starting (default 3)
;autorestart=unexpected        ; autorestart if exited after running (def: unexpected)
;exitcodes=0                   ; 'expected' exit codes used with autorestart (default 0)
;stopsignal=QUIT               ; signal used to kill process (default TERM)
;stopwaitsecs=10               ; max num secs to wait b4 SIGKILL (default 10)
;stopasgroup=false             ; send stop signal to the UNIX process group (default false)
;killasgroup=false             ; SIGKILL the UNIX process group (def false)
;user=chrism                   ; setuid to this UNIX account to run the program
;redirect_stderr=false         ; redirect_stderr=true is not allowed for eventlisteners
;stdout_logfile=/a/path        ; stdout log path, NONE for none; default AUTO
;stdout_logfile_maxbytes=1MB   ; max # logfile bytes b4 rotation (default 50MB)
;stdout_logfile_backups=10     ; # of stdout logfile backups (0 means none, default 10)
;stdout_events_enabled=false   ; emit events on stdout writes (default false)
;stdout_syslog=false           ; send stdout to syslog with process name (default false)
;stderr_logfile=/a/path        ; stderr log path, NONE for none; default AUTO
;stderr_logfile_maxbytes=1MB   ; max # logfile bytes b4 rotation (default 50MB)
;stderr_logfile_backups=10     ; # of stderr logfile backups (0 means none, default 10)
;stderr_events_enabled=false   ; emit events on stderr writes (default false)
;stderr_syslog=false           ; send stderr to syslog with process name (default false)
;environment=A="1",B="2"       ; process environment additions
;serverurl=AUTO                ; override serverurl computation (childutils)

; The sample group section below shows all possible group values.  Create one
; or more 'real' group: sections to create "heterogeneous" process groups.

;[group:thegroupname]
;programs=progname1,progname2  ; each refers to 'x' in [program:x] definitions
;priority=999                  ; the relative start priority (default 999)

; The [include] section can just contain the "files" setting.  This
; setting can list multiple files (separated by whitespace or
; newlines).  It can also contain wildcards.  The filenames are
; interpreted as relative to this file.  Included files *cannot*
; include files themselves.

[include]
;files = relative/directory/*.ini
; files = /etc/supervisor/conf.d/*.conf  # 均可, 子进程配置保持一致
files = /etc/supervisor/conf.d/*.ini

注:主配置文件说明网上有很多, 大家自行百度了解

http://www.17admin.cc/article-7033-1.html

子进程配置文件

[program:test]
user=root  # 执行进程的用户
directory=/xxx/PythonProject  # 脚本的工作目录
command=/user/bin/python xxx.py # 运行的实际命令

# 自启
priority=3  # 进程启动优先级,默认999,值小的优先启动
startsecs=30  #进程持续运行多久才认为是启动成功
autostart=true  # supervisor启动时自动该应用
autorestart=true  # 程序崩溃时自动重启

# 日志
stderr_logfile=/etc/supervisor/log/test/err.log # 输出error日志的文件路径
stdout_logfile=/etc/supervisor/log/test/out.log # 输出日志的文件路径
stdout_logfile_maxbytes = 30MB # stdout日志文件大小,默认 50MB
stdout_logfile_backups = 3  # stdout日志文件备份数

注: 子进程配置文件也有很多参数, 大家自行百度了解

ChatGPT 回答

三、启动服务supervisor 并查看是否生效

	/usr/local/python3/bin/supervisord -c  -d /etc/supervisor/supervisord.conf
	
	ps -ef | grep supervisord 

参数详解

在这里插入图片描述

四、 设置开机自启动

	systemctl enable supervisord.service
	systemctl status supervisord  # 检查启动状态

如果报错, 需自行配置 supervisord.service 文件

a、 在指定目录下创建文件supervisord.service

	vim /usr/lib/systemd/system/supervisord.service

b.输入以下内容:

[Unit]
Description=Supervisor daemon 

[Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf
ExecStop=/usr/bin/supervisorctl shutdown
ExecReload=/usr/bin/supervisorctl reload
KillMode=process
Restart=on-failure
RestartSec=42s 

[Install]
WantedBy=multi-user.target

c、 执行以下命令

	systemctl enable supervisord

d、验证是否为开机启动,提示:enabled 表示设置成功!

	systemctl is-enabled supervisord

五、开启web页面管理程序

[inet_http_server]   ;HTTP服务器,提供web管理界面
port=127.0.0.1:9001  ;Web管理后台运行的IP和端口,如果开放到公网,需要注意安全性
username=user    ;登录管理后台的用户名
password=123    ;登录管理后台的密码

主进程配置文件 /etc/supervisor/supervisord.conf 中把注释的这几行代码全部解除注释,
然后更改端口,用户名和密码

web页面

六、supervisorctl 管理命令

client端的命令行工具,管理子进程,配置文件在/etc/supervisord.d/目录下

# 主进程文件 /etc/supervisord.conf修改, 重新加载配置文件
supervisorctl reload

# 子进程文件修改 /etc/supervisor/conf.d/test.ini 重新加载子配置
supervisorctl update  

supervisorctl status  # 查看所有进程的状态

supervisorctl status 子进程 # 查看单个子进程的状态: 

supervisorctl stop 子进程  # 关闭单个子进程

supervisorctl stop all  # 关闭所有子进程

supervisorctl start 子进程  # 启动单个子进程

supervisorctl start all  # 启动所有子进程

supervisorctl restart 子进程 # 重启单个子进程


直接执行supervisorctl命令, 进入交互页面

交互界面, 不用再输supervisorctl

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

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

相关文章

Bean的自动装配

目录结构 导入pom.xml依赖包 <dependencies><!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><vers…

工赋开发者社区 | Gartner发布2023年十大数据和分析趋势

来源&#xff1a;Gartner Gartner&#xff08;技术研究和分析机构&#xff09;近日公布了2023年十大数据和分析&#xff08;D&A&#xff09;趋势&#xff0c;可帮助企业领导者通过预测变化将不确定性转化为新的商机。 正文开始 Gartner在Gartner数据与分析峰会上介绍了企…

诞生两年,这个产品便成为腾讯安全的“秘密武器”

腾讯既是企业服务产品的服务商又是使用者&#xff0c;很多产品最原始的出发点最早只是为了解决腾讯自身某一个需求&#xff0c;经过不断地发展完善和业务场景锤炼&#xff0c;最终从进化成一个成熟的企服产品。本系列文章讲述的是这样一组Made in Tencent故事&#xff0c;这是系…

2023年 - 我们遇到的那些面试题 (1) - 面试技巧和功能测试篇

前言 最近收到了很多粉丝反馈的面试题 。。 有主观题 &#xff0c;有功能测试题&#xff0c;有python编程题 &#xff0c;有自动化测试题&#xff0c;有数据库题&#xff0c;linux等。。 本文作为《测试面试宝典》内容&#xff0c;将面试题以及部分参考答案开放出来。。 1、…

只要做好这布成为测试经理不是梦!

之前说了太多的测试技术和测试用例设计方法&#xff0c;猛地发现有点“偏科“了。今天我们放松一些&#xff0c;泡一杯茶&#xff0c;一起来聊一聊测试策略吧。 当然&#xff0c;文章脉络肯定是咱们老三样&#xff1a;什么是测试策略&#xff0c;为什么要制定测试策略&#xf…

3年测试经验,跳进腾讯,3面终获20K的Offer...

前言 时间过得飞快&#xff0c;一代又一代就这么成长了起来&#xff0c;曾经的95后备受争议&#xff0c;如今的95后进入社会&#xff0c;扮演者各行角色&#xff0c;成为了行业顶梁柱&#xff0c;今天&#xff0c;要分享的是自己的成长经历。今年24岁&#xff0c;毕业之后进入…

5th-Generation Mobile Communication Technology(六)

目录 一、5G/NR 1、 快速参考&#xff08;Quick Reference&#xff09; 2、5G Success 3、5G Challenges 4、Qualcomm Videos 二、PHY and Protocol 1、Frame Structure 2、Numerology 3、Waveform 4、Frequency Band 5、BWP 6、Synchronization 7、Beam Management 8、CSI Fra…

UE4 监听游戏窗口最小化事件

UE4 监听游戏窗口最小化事件 结论&#xff1a; 先说结论&#xff1a;Windows相关事件在UE4中引擎部分也会处理&#xff0c;包括窗口创建&#xff0c;销毁&#xff0c;最大化最小化&#xff0c;窗口尺寸改变等。通常&#xff0c;每个事件与Windows一样都是WM_***的样子表示&…

静态程序分析学习心得 tai-e

0x00 前言 经过将近2个月的时间&#xff0c;看完了b站上南大的静态程序分析课程&#xff0c;并且完成了其oj上的作业&#xff0c;在这里记录一下在做题过程中&#xff0c;遇到的一些坑点&#xff0c;文章不会贴源码&#xff0c;只记录一下思路&#xff0c;因此大家可以放心阅读…

aac怎么转化为mp3?4个超简易转换方法推荐给大家!

aac怎么转化为mp3&#xff1f;音乐是人类灵魂的表达&#xff0c;只有懂得欣赏音乐的人才能领略到生活的美好与价值。除了运动、看电影等&#xff0c;聆听音乐也是小伙伴们调剂生活的一个好方式。很多小伙伴都有在网上下载音乐的习惯&#xff0c;通过我们也都知道音乐的格式种类…

Linux系统编程——多线程[下]:生产消费模型信号量线程池

0.关注博主有更多知识 操作系统入门知识合集 目录 1.生产者消费者模型 1.1基于阻塞队列的生产者消费者模型 1.2生产消费模型的效率问题 2.信号量 2.1信号量 2.2基于环形队列的生产者消费者模型 2.3环形队列的生产消费模型的效率问题 3.线程池 3.1线程池的实现 1.生…

javaIO流之转换流

目录 简介一、编码和解码二、字符集2.1ASCII 字符集2.2Unicode 字符集2.3GBK 字符集 三、乱码四、InputStreamReader4.1构造方法4.2解决编码问题 五、OutputStreamWriter六、小结 简介 转换流可以将一个字节流包装成字符流&#xff0c;或者将一个字符流包装成字节流。这种转换…

Ajax、Promise、Axios前端三剑客

文章目录 &#x1f433;前言关系二维表&#xff1a; &#x1f433;Ajax定义&#xff1a;特点&#xff1a;&#x1f421;核心对象XMLHttpRequest&#xff1a;XMLHttpRequest对象的五种状态&#xff1a; 使用&#xff1a;1.Jquery的ajax&#xff1a;2.Vue的ajax&#xff1a; &…

【C#】GridControl增加选择列(不用二次点击)

系列文章 【C#】单号生成器&#xff08;编号规则、固定字符、流水号、产生业务单号&#xff09; 本文链接&#xff1a;https://blog.csdn.net/youcheng_ge/article/details/129129787 【C#】日期范围生成器&#xff08;开始日期、结束日期&#xff09; 本文链接&#xff1a;h…

【FMC156】基于VITA57.1标准的2路2.5GSPS采样率16位分辨率直流耦合DA播放FMC子卡模块(DAC38J82)

产品概述 FMC156 是一款基于VITA57.1 标准规范&#xff0c;实现2 路2.5GSPS 采样率16 位分辨率直流耦合DAC 播放子卡模块。该模块遵循VITA57.1 标准&#xff0c;可直接与FPGA 载卡配合使用&#xff0c;板卡DAC 器件采用TI 公司的DAC38J82 芯片&#xff0c;该芯片提供4 个模拟输…

2023,有哪些适合网工跳槽的好公司?(不是BAT)

大家好啊&#xff0c;我的网工朋友 都说行业内卷&#xff0c;卷的不成人形&#xff0c;这内卷&#xff0c;一卷就卷了好几年。 很多网工同行都讨厌被卷来卷去&#xff0c;但是看到同行进了大厂&#xff0c;免不了还是要羡慕嫉妒恨一波。 作为主编几年&#xff0c;我就发现了…

注册ChatGPT时提示Oops! The email you provided is not supported

问题描述 今天本想出一个ChatGPT的注册与使用的教程&#xff0c;结果上来吃了个闭门羹。之前我通过微软账号登录验证是没有问题的&#xff0c;但这次想使用另一个微软账号&#xff0c;结果提示Oops! The email you provided is not supported&#xff08;您提供的电子邮件不支…

C# 给winfrom窗体添加皮肤控件

如何快速给C# winform添加好看的皮肤C# Winform中窗体的美化 SkinEngine的应用 皮肤控件换肤素材包&#xff0c;IrisSkin2.dll皮肤素材资源下载 压缩包内一共有22种皮肤素材&#xff0c;使用说明&#xff1a;把控件拖到你的form上&#xff0c;只需一行代码&#xff0c;即可实…

Ubuntu安装时没注册root用户密码,怎么登录root

一、Ubuntu设置root密码: 1.桌面空白处右键菜单 点击“打开终端“。 2.输入命令 "sudo passwd root

Cinema 4d 和 3ds Max:哪个软件更好?

3D 设计有很多挑战。设计师通常需要克服他们的看法和偏见&#xff0c;此外还要学习一些深入的程序来有效地使用 3D 风格的软件系统。市场上有很多用于3D设计的软件&#xff0c;因此对于哪一种对您的需求最有效会令人困惑。如果您不熟悉3D&#xff0c;或者您正在四处寻找新的软件…