Supervisor进程管理工具安装
- 一、Supervisor概况及作用
- 1.概况
- 2.主要作用
- 1)、进程管理
- (1). 启动与停止进程
- (2). 自动重启进程
- (3). 进程状态监控
- 2)、日志管理
- (1).集中化日志记录
- 3)、资源管理与优化
- (1). 控制进程资源使用
- 二.安装 Supervisor
- 1. 方法一:使用pip安装
- 1).pip 来安装 Supervisor:
- 2).验证安装
- 2.方法二、CentOS系统中分别使用yum
- 1)、使用yum安装Supervisor
- (1). 安装EPEL仓库(如果没有安装的话)
- 2). 安装Supervisor
- 3).验证安装
- 三、配置 Supervisor
- 1.配置文件位置
- 2.基本配置修改(可选)
- 2.1整体优点
- 2.1.1. 标准性和兼容性
- 2.1.2. 日志管理合理性
- 2.1.3. 进程管理适应性
- 2.2整体缺点
- 2.2.1.日志文件位置的潜在风险(`logfile`)
- 2.2.2.资源设置的灵活性(`minfds`和`minprocs`)
- 2.2.3日志备份数量(`logfile_backups`)
- 2.3端口相关配置
- 2.3.1.端口配置
- 2.3.2注意事项
- 3.启动 Supervisor及验证是成功
- 4.supervisord.service配置
- 4.1查看supervisord和supervisorctl所在位置
- 4.2检查 supervisord 服务单元文件: 如果您找不到 supervisord.service 文件,您可以手动创建它。以下是一个简单的 supervisord.service 文件示例:
- 4.3重新加载 systemd 配置:
- 4.4)supervisord开机启动
- 4.5)supervisord启停命令
- 5.配置被管理的进程(程序)
- 5.1).创建/etc/supervisord.d/目录,并修改配置文件
- 5.2).在/etc/supervisord.d/目录下创建配置文件(以.ini为扩展名)来管理各个进程。
- 6.重新加载配置。
- 7.Supervisor常用命令
一、Supervisor概况及作用
1.概况
supervisor 是一个用 Python 编写的客户端/服务器系统,允许其用户在类 Unix 系统上控制多个进程。它是一个进程管理工具,可以帮助你管理和监控进程的生命周期,包括启动、停止、重启以及自动重启失败的进程。
以下是 Supervisor 的一些主要特点和用途:
- 进程管理:Supervisor 可以管理任何类型的进程,不仅仅是 Python 进程。你可以使用它来管理 Web 服务器、数据库服务器、后台任务等。
- 自动重启:如果一个进程意外退出,Supervisor 可以自动重启它,确保服务持续运行。
- 进程组:Supervisor 允许你将多个进程组织成组,并对整个组进行操作,如启动、停止或重启。
- 事件监听:Supervisor 支持事件监听机制,允许你编写自定义脚本来响应进程状态的变化。
- Web 界面和命令行工具:Supervisor 提供了一个简单的 Web 界面和命令行工具,方便你监控和管理进程。
配置简单:Supervisor 的配置文件通常是一个简单的 INI 格式文件,易于理解和维护。
2.主要作用
Supervisor主要有以下作用:
1)、进程管理
(1). 启动与停止进程
- 可以方便地启动、停止和重启由它管理的进程。例如,如果你有一个Web应用程序,使用Supervisor管理时,你可以通过简单的命令(如
supervisorctl start mywebapp
)来启动这个Web应用程序进程。如果需要停止,使用supervisorctl stop mywebapp
。
(2). 自动重启进程
- 当被管理的进程意外退出(例如由于程序错误、系统资源不足等原因)时,Supervisor能够自动重启该进程。例如,一个Python脚本在运行过程中因为某个未处理的异常而崩溃,Supervisor会按照配置自动重新启动这个脚本进程,确保服务的连续性。
(3). 进程状态监控
- 能够实时监控被管理进程的运行状态。通过
supervisorctl status
命令,可以查看各个进程是处于运行(RUNNING)、停止(STOPPED)还是其他状态(如FATAL表示进程启动失败等)。这有助于系统管理员快速了解系统中关键服务的运行情况。
2)、日志管理
(1).集中化日志记录
- Supervisor可以将被管理进程的标准输出(stdout)和标准错误(stderr)重定向到指定的日志文件。这样,对于多个进程的日志管理就变得更加方便。例如,有多个不同功能的Python脚本在运行,Supervisor可以分别为每个脚本的输出和错误信息设置独立的日志文件,便于故障排查和系统监控。
3)、资源管理与优化
(1). 控制进程资源使用
- 在一定程度上可以对被管理进程的资源使用进行控制。虽然它不是专门的资源管理工具,但可以通过一些配置选项(如设置进程的启动优先级等)来避免某个进程过度占用系统资源,从而保证系统整体的稳定性和性能。例如,在一个多进程的服务器环境中,通过Supervisor合理配置不同进程的启动顺序和资源分配优先级,可以确保关键服务(如数据库服务)优先获取资源,避免被其他非关键进程抢占资源而导致性能下降。
二.安装 Supervisor
1. 方法一:使用pip安装
1).pip 来安装 Supervisor:
pip install supervisor
您可以使用 sudo 命令来提升权限,以便 pip 可以写入系统目录。例如:
sudo pip install supervisor
2).验证安装
supervisord -v
2.方法二、CentOS系统中分别使用yum
以下是在CentOS系统中分别使用yum和pip安装Supervisor的步骤:
1)、使用yum安装Supervisor
(1). 安装EPEL仓库(如果没有安装的话)
EPEL(Extra Packages for Enterprise Linux)仓库包含了许多额外的软件包,Supervisor可能就在其中。
yum install epel-release -y
2). 安装Supervisor
yum install supervisor -y
3).验证安装
supervisord -v
三、配置 Supervisor
1.配置文件位置
安装完成后,你需要创建一个配置文件。通常,这个文件位于 /etc/supervisord.conf。你可以使用以下命令生成一个默认配置文件:
echo_supervisord_conf > /etc/supervisord.conf
2.基本配置修改(可选)
在[supervisord]部分,可以修改一些基本的配置参数,例如日志文件的位置、端口号等。
例如,修改日志文件位置:
[supervisord]
logfile =/var/log/supervisord.log ; 日志文件路径
logfile_maxbytes=50MB; 日志文件大小
logfile_backups=10 ;保留10个备份日志文件个数
loglevel = info ; 日志级别,可以是debug、info、warn、error等
pidfile =/var/run/supervisord.pid ; PID文件路径
nodaemon = false ; 是否以守护进程模式运行,默认是true(后台运行)
minfds = 1024 ; 最小文件描述符数量
minprocs = 200 ; 最小进程数量
silent = false ;允许将日志输出到标准输出,方便查看和监控Supervisor的运行情况
以下是对上述配置的优缺点分析:
2.1整体优点
2.1.1. 标准性和兼容性
- 这种配置遵循了许多Linux系统中的常见实践。例如,将
logfile
设置为/var/log/supervisord.log
、pidfile
设置为/var/run/supervisord.pid
,这些都是在Linux系统中管理日志和进程相关文件的标准位置。这有助于与系统的日志管理工具(如logrotate
)和进程管理机制更好地集成。
2.1.2. 日志管理合理性
- 日志大小限制(
logfile_maxbytes
和logfile_backups
)- 设置
logfile_maxbytes = 50MB
和logfile_backups = 10
是一种比较合理的日志管理策略。50MB的单个日志文件大小限制可以防止日志文件无限制增长,避免占用过多磁盘空间。同时,保留10个备份日志文件个数能够提供足够的历史日志记录,方便在出现问题时进行回溯和排查。
- 设置
- 日志级别(
loglevel
)- 选择
loglevel = info
在大多数情况下是一个很好的平衡。它提供了足够的信息来监控Supervisor及其管理的进程的运行状态,包括进程的启动、停止、重启等操作信息,以及一些可能的错误提示。相比于debug
级别,它不会产生过多的日志,从而避免对系统性能和磁盘空间造成过大影响;而相比于warn
或error
级别,它能提供更详细的正常运行信息。
- 选择
2.1.3. 进程管理适应性
- 守护进程模式(
nodaemon
)- 设置
nodaemon = false
表明Supervisor以守护进程模式运行,这是在生产环境和大多数实际应用场景中的常见选择。守护进程模式使得Supervisor在后台运行,不会占用终端会话,并且可以在系统启动时自动启动并持续运行管理进程。
- 设置
- 资源相关设置(
minfds
和minprocs
)minfds = 1024
和minprocs = 200
为Supervisor及其管理的进程提供了一定的资源保障。在大多数系统中,这些数值能够确保在启动和运行过程中有足够的文件描述符和进程资源可用,特别是在管理多个进程或者处理大量文件和网络连接的情况下。
- 日志输出(
silent
)- 设置
silent = false
允许将日志输出到标准输出,这在开发、测试和故障排查阶段非常有用。它可以让管理员方便地查看和监控Supervisor的运行情况,直接在终端或控制台获取实时的日志信息。
- 设置
2.2整体缺点
2.2.1.日志文件位置的潜在风险(logfile
)
- 虽然
/var/log
是标准的日志存储位置,但在某些情况下,这个目录可能会受到磁盘空间限制或者权限问题的影响。例如,如果/var
分区的磁盘空间有限,大量的日志文件可能会填满该分区,导致系统出现问题。此外,如果系统的日志管理策略对/var/log
目录有特殊的权限设置,可能会影响Supervisor对日志文件的写入操作。
2.2.2.资源设置的灵活性(minfds
和minprocs
)
- 对于
minfds = 1024
和minprocs = 200
这两个设置,在某些特殊的系统环境下可能不够灵活。例如,在资源受限的系统(如小型嵌入式设备或低配置的虚拟机)中,这些数值可能过高,导致资源浪费或者系统启动失败。相反,在处理大量并发进程或者高负载网络应用的系统中,这些数值可能又显得过低,无法满足实际需求。
2.2.3日志备份数量(logfile_backups
)
- 虽然保留10个备份日志文件个数(
logfile_backups = 10
)可以提供较多的历史日志记录,但在磁盘空间有限的系统中,这可能会占用过多的磁盘空间。特别是当每个日志文件都比较大(如logfile_maxbytes = 50MB
)时,10个备份文件可能会消耗大量的磁盘资源。
2.3端口相关配置
2.3.1.端口配置
- 在Supervisor的配置文件中,默认情况下没有直接配置监听端口的选项。Supervisor默认监听在本地的Unix套接字(
/var/run/supervisor.sock
)上进行进程间通信。 - 如果想要通过网络端口来访问Supervisor的Web界面(Supervisor提供了一个基本的Web界面用于查看和管理进程状态),需要添加额外的配置。
- 在
[inet_http_server]
部分进行配置(如果配置文件中没有此部分,需要手动添加)。例如:
[inet_http_server]
port = 9001; 这里设置Supervisor的Web界面监听的端口为9001
username = user; 可设置访问Web界面的用户名(可选)
password = pass; 可设置访问Web界面的密码(可选)
2.3.2注意事项
- 如果设置了监听端口,需要确保防火墙允许相应端口的访问。例如,在CentOS中,如果使用
firewalld
防火墙:
firewall - cmd --zone = public --add - port = 9001/tcp --permanent
firewall - cmd --reload
- 另外,从安全角度考虑,如果在生产环境中设置了用户名和密码,要确保密码的强度足够,并且定期更新。同时,限制对Supervisor Web界面的访问来源(例如,只允许特定的IP地址范围访问)也是一种安全措施。
3.启动 Supervisor及验证是成功
supervisord -c /etc/supervisord.conf
ps -aux|grep supervisor
4.supervisord.service配置
4.1查看supervisord和supervisorctl所在位置
which supervisord
which supervisorctl
4.2检查 supervisord 服务单元文件: 如果您找不到 supervisord.service 文件,您可以手动创建它。以下是一个简单的 supervisord.service 文件示例:
vim /usr/lib/systemd/system/supervisord.service
[Unit]
Description=Supervisor process control system for UNIX
Documentation=http://supervisord.org
After=network.target
[Service]
#Uncomment the line below if you want to run it as a daemon
#Type=forking
ExecStart=/usr/bin/supervisord -n -c /etc/supervisord.conf
ExecStop=/usr/bin/supervisorctl $OPTIONS shutdown
ExecReload=/usr/bin/supervisorctl $OPTIONS reload
KillMode=process
Restart=on-failure
RestartSec=20s
[Install]
WantedBy=multi-user.target
4.3重新加载 systemd 配置:
systemctl daemon-reload
4.4)supervisord开机启动
systemctl enable supervisord
4.5)supervisord启停命令
1.查看状态
systemctl status supervisord
2.启动
systemctl start supervisord
3.停止
systemctl stop supervisord
4.重载
systemctl reload supervisord
4.重启
systemctl reload supervisord
5.配置被管理的进程(程序)
5.1).创建/etc/supervisord.d/目录,并修改配置文件
mkdir -p /etc/supervisord.d/
5.2).在/etc/supervisord.d/目录下创建配置文件(以.ini为扩展名)来管理各个进程。
[program:myapp]
process_name=%(program_name)s
command = /usr/local/python3.9/bin/python3.9 myapp.py
directory = /data/caspaper/ocr
autostart = true
startsecs = 5
autorestart = true
startretries = 3
redirect_stderr = true
stdout_logfile_maxbytes = 200MB
stdout_logfile_backups = 10
stdout_logfile = /tmp/myapp.log
- [program:myapp]
- 这是Supervisor配置文件中的一个节(section)标识。它定义了一个名为“myapp”的程序配置块。在这个块内的所有配置项都与管理名为“myapp”的进程相关。
- process_name = %(program_name)s
- 这里的
process_name
指定了被管理进程的名称。使用%(program_name)s
这种格式表示进程名称将与program_name
(在这里就是“myapp”)相同。这有助于在Supervisor中唯一标识这个进程,方便进行管理操作,如查看进程状态、启动或停止进程等。
- 这里的
- command = python3 mq_shibie.py C1
command
定义了启动被管理进程的命令。在这个例子中,它表示使用系统中的python3
解释器来运行名为mq_shibie.py
的脚本,并传递一个参数C1
。这个命令是Supervisor用来启动相关进程的依据。
- directory=/data/caspaper/ocr
directory
指定了在启动进程之前要切换到的工作目录。Supervisor会先将当前工作目录切换到/data/caspaper/ocr
,然后再执行command
中定义的命令。这个目录可能包含进程运行所需的资源,如配置文件、输入数据等。
- autostart = true
- 当设置为
true
时,表示Supervisor在自身启动时会自动启动这个名为“myapp”的进程。这对于需要在系统启动后就持续运行的服务非常有用,不需要手动干预就可以确保进程开始运行。
- 当设置为
- startsecs = 5
- 这个配置项定义了在启动进程之后,Supervisor需要等待多长时间(以秒为单位)才认为进程启动成功。这里设置为5秒,也就是说,Supervisor启动进程后会等待5秒,如果进程在这5秒内没有异常退出,就认为启动成功。这有助于处理那些启动过程可能稍慢的进程,避免误判为启动失败。
- autorestart = true
- 如果设置为
true
,当被管理的进程意外退出(例如因为程序错误、系统资源不足等原因)时,Supervisor会自动重新启动该进程。这有助于确保进程的持续运行,提高服务的可靠性。
- 如果设置为
- startretries = 3
- 定义了在进程启动失败时,Supervisor尝试重新启动的最大次数。这里设置为3次,即如果进程启动失败,Supervisor最多会尝试重新启动3次。
- redirect_stderr = true
- 当设置为
true
时,被管理进程的标准错误输出(stderr)将会被重定向。通常会与标准输出(stdout)的处理方式相关联,比如重定向到同一个日志文件(根据后续的配置),这样便于在一个地方查看进程的所有输出信息(包括正常输出和错误输出)。
- 当设置为
- stdout_logfile_maxbytes = 200MB
- 这个配置项设定了标准输出日志文件(
stdout_logfile
)的最大容量。当标准输出日志文件达到200MB时,Supervisor可能会根据其他相关配置(如日志轮转相关的配置)采取相应的操作,例如进行日志备份或者截断等操作。
- stdout_logfile_backups = 10
- 定义了标准输出日志文件(
stdout_logfile
)的备份数量。当达到stdout_logfile_maxbytes
设定的大小并且进行日志轮转操作时,Supervisor会保留10个旧版本的日志文件作为备份,以便在需要时查看历史日志信息。
- stdout_logfile = /tmp/myapp.log
- 指定了被管理进程的标准输出(stdout)的日志文件路径。进程正常运行时输出的信息(例如通过
print
语句输出的内容)将会被记录到这个位于/tmp
目录下的myapp.log
文件中。这有助于在需要时查看进程的运行状态和输出结果。
6.重新加载配置。
如果在添加配置文件后没有重新加载Supervisor的配置,新的配置不会生效。
可以使用以下命令重新加载配置:
supervisorctl reread
supervisorctl status
reread命令会让Supervisor重新读取配置文件,update命令会根据新的配置启动或重启相关的进程。
7.Supervisor常用命令
supervisorctl 是一个用于管理 Supervisor 进程控制系统的命令行工具。Supervisor 是一个用于在类 Unix 系统上控制和管理进程的客户端/服务器系统。supervisorctl 允许用户通过命令行与 Supervisor 进行交互,从而启动、停止、重启和管理多个进程。
以下是 supervisorctl 的一些常用命令和作用:
supervisor 英 [su:pvaz®]监督者,管理者;ctl主管
1.启动进程
supervisorctl start <process_name>
#执行的命令,启动所有由 Supervisor 管理的进程。* 表示所有进程。
supervisorctl start *
启动指定的进程。
2.停止进程:: 停止一个或多个进程。
supervisorctl stop <process_name>
supervisorctl start all
停止指定的进程。
3.重启进程:重启一个或多个进程。
supervisorctl restart <process_name>
supervisorctl restart all
重启指定的进程。
4.查看进程状态:
supervisorctl status
显示所有被 Supervisor 管理的进程的状态。
5.重新加载配置文件:
supervisorctl reread
重新加载配置文件,但不应用更改。
6.更新进程列表:
supervisorctl update
应用配置文件的更改,并根据需要启动或停止进程。
7.进入交互模式:
supervisorctl
8.查看帮助:
supervisorctl help
显示特定命令的帮助信息。
9.查看特定命令的帮助:
supervisorctl help <command>
显示特定命令的帮助信息。
10.实时查看指定进程的日志输出
supervisorctl tail -f <process_name>
实时查看日志:该命令会实时显示名为 mq_pre02 的进程的日志输出,类似于在终端中使用 tail -f 命令查看日志文件。
持续跟踪:-f 选项使得命令会持续输出日志文件的最新内容,直到你手动停止(通常是按 Ctrl+C)。
11.pid [process]: 获取进程的 PID。
supervisorctl pid <process_name>
12.clear [process]: 清除进程的日志文件。
supervisorctl clear <process_name>