ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

supervisorctl 进程管理

2021-08-20 14:02:30  阅读:240  来源: 互联网

标签:supervisor supervisord 配置文件 管理 配置 supervisorctl 进程


简介

supervisor 是一个 Python 编写的进程管理工具,可以方便的 启动、重启、关闭 单个或多个进程(包括非 Python 进程)

官网 http://supervisord.org

 

为啥需要这东西呢,简单理解如下

咱们通常管理linux进程的时候,一般来说都需要自己编写一个能够实现进程start/stop/restart/reload功能的脚本,然后丢到/etc/init.d/下面。
这么做有很多不好的地方,第一我们要编写这个脚本,这就很耗时耗力了。第二,当这个进程挂掉的时候,linux不会自动重启它的,想要自动重启的话,我们还要自己写一个监控重启脚本。

而,supervisor则可以完美的解决这些问题。好,怎么解决的呢,其实supervisor管理进程,就是通过fork/exec的方式把这些被管理的进程,当作supervisor的子进程来启动。这样的话,
我们只要在supervisor的配置文件中,把要管理的进程的可执行文件的路径写进去就OK了。这样就省下了我们如同linux管理进程的时候,自己写控制脚本的麻烦了。
第二,被管理进程作为supervisor的子进程,当子进程挂掉的时候,父进程可以准确获取子进程挂掉的信息的,所以当然也就可以对挂掉的子进程进行自动重启了,
当然重启还是不重启,也要看你的配置文件里面有木有设置autostart=true了,这是后话。

 

安装

supervisor 可以运行在 linux、mac等系统上,因为是 Python 开发的,故可直接 pip 安装

pip install supervisor

安装完成后,在 python/bin 目录下可找到

 

配置

supervisor 配置包含 supervisor 自身的配置 和 program 的配置;

supervisor 是一个 C/S 模型的程序,supervisord 是服务端,提供各种进程管理逻辑,supervisorctl 是客户端,提供各种操作方法,

program 是应用程序,即我们的服务

 

supervisor 服务端配置

1. 首先看看 supervisord 的配置,也可把默认配置重定向到指定文件

echo_supervisord_conf    # 查看配置
echo_supervisord_conf > /etc/supervisord.conf    # 重定向配置文件

去掉乱七八糟的,配置大概如下

 

2. 启动 supervisord

supervisord -c /etc/supervisord.conf

通过 -c 指定配置文件;

如果不指定会按照这个顺序查找配置文件:$CWD/supervisord.conf, $CWD/etc/supervisord.conf, /etc/supervisord.conf

 

program 配置

配置方式

supervisrod 运行起来后,需要添加 program 的配置文件。

可以把 program 的配置项也写到 supervisord.conf 文件里,但并不推荐这样做,而是通过 include 的方式把不同的程序(组)写到不同的配置文件里。

举例,新建一个目录 /etc/supervisor/ 用于存放 program 配置文件,然后把 /etc/supervisord.conf 里 include 部分的的配置修改一下:

 

配置内容

假设我们的服务如下:

用 Python 和 Flask 框架编写的用户中心系统,取名 usercenter,用 gunicorn (http://gunicorn.org/) 做 web 服务器。

项目代码位于 /home/leon/projects/usercenter,gunicorn 配置文件为 gunicorn.py,WSGI callable 是 wsgi.py 里的 app 属性。直接在命令行启动的方式是这样的:

 

对应的配置文件如下

 配置文件至少需要一个 [program:x] 部分的配置,来告诉 supervisord 需要管理那个进程。

[program:x] 语法中的 x 表示 program name,会在客户端(supervisorctl 或 web 界面)显示,在 supervisorctl 中通过这个值来对程序进行 start、restart、stop 等操作

 

使用 supervisorctl 启动服务

两种方式

1. 启动 supervisorctl,进入 其 shell 操作界面;

该方式需要 指定 和 supervisord 相同的配置文件

 

 上面这个命令会进入 supervisorctl 的 shell 界面,然后可以执行不同的命令了:

 

2.直接在命令行执行命令

 

其它

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

除了单个进程的控制,还可以配置 group,进行分组管理。

经常查看日志文件,包括 supervisord 的日志和各个 pragram 的日志文件,程序 crash 或抛出异常的信息一半会输出到 stderr,可以查看相应的日志文件来查找问题。

 

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

https://www.cnblogs.com/gaidy/p/12808662.html 

 

常用命令

supervisor客户端命令

查看所有子进程的状态

[root@pld3wlcap07 bin]# ./supervisorctl status
roadplan                         RUNNING   pid 87098, uptime 20 days, 22:53:08

第一列是服务名;

第二列是运行状态,RUNNING表示运行中,FATAL 表示运行失败,STARTING表示正在启动, STOPED表示任务已停止; 

第三/四列是进程号;

最后是任务已经运行的时间

 

supervisorctl status processname    # 查看指定进程的状态

supervisorctl start all             # 启动所有进程
supervisorctl start processname     # 启动指定进程
supervisorctl stop all              # 关闭所有进程
supervisorctl stop processname      # 关闭指定进程
supervisorctl restart processname   # 重启指定进程

supervisorctl shutdown              # 关闭supervisord
supervisorctl clear 进程名           # 清空进程日志
supervisorctl                       # 进入到交互模式下。使用help查看所有命令

# 载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程:
supervisorctl reload
# 根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启:
supervisorctl update

supervisor 服务端命令

sudo unlink /var/run/supervisor.sock
supervisord -c /etc/supervisor/supervisord.conf

 

 

更多信息可查看参考资料

 

 

 

参考资料:

http://www.ttlsa.com/linux/using-supervisor-control-program/  使用 supervisor 管理进程              【有理论】

https://blog.csdn.net/yfanjy/article/details/105975723  supervisor、supervisord、supervisorctl基础使用详解    【有理论】

https://www.jianshu.com/p/c8071234f081  supervisor 常用命令的使用

https://www.jianshu.com/p/32de18156617  简书

标签:supervisor,supervisord,配置文件,管理,配置,supervisorctl,进程
来源: https://www.cnblogs.com/yanshw/p/15166141.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有