Linux下安装并使用Supervisor

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

安装

Supervisor是基于python开发的,安装Supervisor前,需要先安装python,Supervisor可以通过pip或者easy_install安装。

通过easy_install安装

$ yum install python-setuptools
$ easy_install supervisor

或者,通过pip安装

$ pip install supervisor

结构

Supervisord

主进程,负责管理进程的server,它会根据配置文件创建指定数量的应用程序的子进程,管理子进程的整个生命周期,对crash的进程重启,对进程变化发送事件通知等。同时内置web server和XML-RPC Interface,轻松实现进程管理。

Supervisorctl

管理client,用户通过命令行发送消息给supervisord,可以查看进程状态,加载配置文件,启停进程,查看进程标准输出和错误输出,远程操作等。

Web server

Superviosr提供了web server功能,可通过web控制进程。

XML-RPC interface

XML-RPC接口,提供XML-RPC服务来对子进程进行管理,监控。

基本使用

Supervisor的配置文件命名为supervisord.conf,它为supervisord(Supervisor 的主服务命令) 和 supervisorctl(Supervisor 的监控管理命令) 提供配置选项设置。 Supervisor并不规定配置文件supervisord.conf的存放位置。Supervisor服务启动的时候默认会在:

$CWD/supervisord.conf
$CWD/etc/supervisord.conf
/etc/supervisord.conf

这几个目录位置查找配置文件supervisord.conf,用yum安装的supervisor默认会生成/etc/supervisord.conf配置文件。Supervisor也提供参数 “-c” 来指定配置文件的目录路径。

如果你是编译安装,或其他系统,可以在终端输入”echo_supervisord_conf”命令查看Supervisor的默认配置的内容。其可以用来生成一份默认的配置文件:

$ echo_supervisord_conf > /etc/supervisord.conf

Supervisor的配置文件生成之后,现在可以添加我们要管理的进程的配置文件。可以把所有配置项都写到supervisord.conf文件里,但并不推荐这样做,而是通过include的方式把不同的程序(组)写到不同的配置文件里。要确保你的supervisord.conf配置文件中include包含了你自定义的配置文件包含进来,如下:

[include]
files = /etc/supervisord.d/*.conf

下面我们修改配置文件将memcached进程以deamon方式拉起(memcached进程也可以是一个shell或python脚本),并对此进行监控。

先在supervisor目录下创建一个配置文件,如下

$ cat /etc/supervisord.d/memcached.conf
[program:memcached]
# 启动程序的命令;command = /usr/bin/memcached -m 5120 -p 11211 -u nobody -l 0.0.0.0 -b 65535
# 在supervisord启动的时候也自动启动;
autostart = true# 程序异常退出后自动重启;
autorestart = true# 启动5秒后没有异常退出,就当作已经正常启动了;
startsecs = 5
# 启动失败自动重试次数,默认是3;
startretries = 3
# 启动程序的用户;
user = nobody
# 把stderr重定向到stdout,默认false;
redirect_stderr = true# 标准日志输出;
stdout_logfile=/data/log/memcached/out-memcache.log
# 错误日志输出;
stderr_logfile=/data/log/memcached/err-memcache.log
# 标准日志文件大小,默认50MB;
stdout_logfile_maxbytes = 20MB
# 标准日志文件备份数;
stdout_logfile_backups = 20

一份配置文件至少需要一个 [program:x] 部分的配置,来告诉supervisord 需要管理那个进程。[program:x]语法中的x表示program name,会在客户端(supervisorctl 或 web 界面)显示,在 supervisorctl 中通过这个值来对程序进行start、restart、stop等操作。日志文件要存放的文件夹要创建好。

使用supervisor还有一个更大的好处就是,可以快速开启多个进程,配置参数如下:

process_name=%(process_num)s
numprocs=3

表示对同一个配置开启3个线程。

启动supervisor,就会拉起memcached进程。

$ supervisord -c /etc/supervisor/supervisord.conf

ps:Supervisor启动后在/tmp目录会产生supervisord.log 、supervisord.pid 、supervisor.sock这三个文件,如果有问题可以查看日志。

查看Supervisor是否已经启动

$ ps -ef | grep supervisor | grep -v grep
root      1170     1  0 18:57 ?        00:00:00 /usr/bin/python /usr/bin/supervisord

查看业务进程是否已经被拉起

$ supervisorctl status
memcached                  RUNNING   pid 1230, uptime 0:04:39

停止Supervisor(子进程也会被停止,也可以针对单个程序进行start、update、restart、stop操作)

$ supervisorctl shutdown

使用supervisorctl命令

Supervisor可通过维护命令supervisorctl管理或通过web管理界面管理。维护命令supervisorctl有两种用法。一种是命令式,一种是交互式。

命令式

\1. 查询各进程运行状态

supervisorctl status

\2. 启、停、重启业务进程,memcached为进程名,即[program:memcached]里配置的值

supervisorctl start memcached
supervisorctl stop memcached
supervisorctl restart memcached

\3. 重启所有属于名为groupworker这个分组的进程

supervisorctl start groupworker
supervisorctl stop groupworker
supervisorctl restart groupworker

\4. 启、停、重启全部进程(不会载入最新的配置文件)

supervisorctl start all
supervisorctl stop all
supervisorctl restart all

\5. 重新加载配置文件,停止原有进程并按新的配置启动所有进程(注意:所有进程会停止并重启,线上操作慎重)

supervisorctl reload

\6. 根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而被重启(注意:这才是线上可以操作的命令,不会重启原有进程)

supervisorctl update

注意:显示状态为stop停止掉的进程,用reload或者update都不会自动重启。

交互式

$ supervisorctl
memcached                       RUNNING   pid 1256, uptime 0:01:47
supervisor> stop memcached
memcached: stopped
supervisor> start memcached
memcached: started
supervisor> status
memcached                       RUNNING   pid 1258, uptime 0:00:04
supervisor> restart memcached
memcached: stopped
memcached: started
supervisor> status
memcached                       RUNNING   pid 1259, uptime 0:00:02
supervisor>

故障处理

这几个故障都是我使用supervisor时遇到的坑,帮你们填上。

supervisor 比较适合监控业务应用,且只能监控前台程序,如果你的程序是以daemon的方式启动,那么执行:supervisor status 会提示:BACKOFF Exited too quickly (process log may have details)。比如:memcached启动时加上-d选项就是以后台daemon启动,就不能使用supervisor监控了。

/usr/bin/memcached -d -m 5120 -p 11211 -u nobody -l 0.0.0.0 -b 65535

还有一个需要注意的,如果执行supervisor status时报错是:FATAL Exited too quickly (process log may have details),要检查一下是不是因为添加了user = nobody导致执行权限的问题。

如果出现这个错误:

Error: .ini file does not include supervisord section

For help, use /usr/bin/supervisord -h

就是你的自定义的程序配置文件格式有问题(/etc/supervisor/conf.d/*.conf),好好检查了。

其他

1)可以自己编写脚本将Supervisor加入chkconfig中,随系统自动启动。 或者可以使用现成的脚本: Supervisor initscripts。

2)除了supervisorctl 之外,还可以配置supervisrod启动web管理界面,这个web后台使用Basic Auth的方式进行身份认证。

3)除了单个进程的控制,还可以配置group,进行分组管理。经常查看日志文件,包括 supervisord的日志和各个 pragram 的日志文件,程序crash 或抛出异常的信息一半会输出到stderr,可以查看相应的日志文件来查找问题。

4)Supervisor有很丰富的功能,还有其他很多项配置,可以在官方文档获取更多信息:http://supervisord.org/index.html

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/203250.html<

(0)
运维的头像运维
上一篇2025-04-06 14:37
下一篇 2025-04-06 14:39

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注