时间:2021-05-23
前言
Supervisor 是一个用 Python 实现的进程管理工具,可以很方便地启动,关闭,重启,查看,以及监控进程,当进程由于某种原因崩溃或者被误杀后,可以自动重启并发送事件通知。Supervisor 可谓运维利器,使用 Supervisor 来管理进程,可以提高系统的高可用特性。
随着 Redis 越来越流行,越来越多的公司都使用上了 redis,因此 Redis 的进程管理就成了很多公司都需要面临的问题,本文介绍如何使用 Supervisor 来管理 Redis 进程。
Supervisor 简介
Supervisor 包括以下四个组件。
1、supervisord
服务端程序,主要功能是启动 supervisord 服务及其管理的子进程,记录日志,重启崩溃的子进程,等。
2、supervisorctl
命令行客户端程序,它提供一个类似 shell 的接口,通过 UNIX 域套接字或者 TCP 套接字并使用 XML_RPC 协议与 supervisord 进程进行数据通信。它的主要功能是管理(启动,关闭,重启,查看状态)子进程。
3、Web Server
实现在界面上管理进程,还能查看进程日志和清除日志。
4、XML-RPC 接口
可以通过 XML_RPC 协议对 supervisord 进行远程管理,达到和 supervisorctl 以及 Web Server 一样的管理功能。
进程被 Supervisor 管理后,其运行状态的转化图如下图 1 所示:
图 1 :子进程状态转移图
我们挑几个重要的进程状态来说明。
没有接触过 Supervisor 的朋友可能对上面的描述感到有些抽象,不用担心,经过下面的实践后,会快速理解 Supervisor 涉及的这些名词的。
Supervisor 初体验
我们以 CentOS 平台下为例,说明如何使用 Supervisor 这一强大的进程管理工具。
1. 安装
可以使用easy_intall来安装 Supervisor:
easy_install supervisor也可以使用pip来安装 Supervisor:
pip install supervisor安装过程比较简单,此处我们不再赘述。
安装完毕后,可以使用以下命令来测试安装是否成功:
echo_supervisord_confecho_supervisord_conf将会在终端输出 Supervisor 配置的样例。
2. 创建配置目录以及主配置文件
为了将 Supervisor 的配置放置到独立的目录中,我们先创建目录:
cd /etcmkdir supervisor接着,可以继续使用echo_supervisord_conf命令,将 Supervisor 样例配置重定向输出到文件文件中:
echo_supervisord_conf > /etc/supervisor/supervisord.conf这样,我们便生成了 Supervisor 的主配置文件supervisord.conf。
为了将 Supervisor 管理的进程配置与主配置文件区分开来,我们创建独立的目录来存放进程配置。
cd /etc/supervisormkdir conf.d然后,修改主配置文件 supervisord.conf,添加以下配置,将 conf.d 目录下的进程配置引入 Supervisor 管理:
[include]files = ./conf.d/*.ini3. 创建管理进程
为方便测试 Supervisor 的功能,我们编写以下 python 脚本,并保存为 hello.py。
import timeimport syswhile True: print("hello\n") sys.stdout.flush() time.sleep(1)hello.py 的主要功能是往标准输出中不断地输出 “hello” 字符串。
4. 创建进程配置
为将 hello.py 脚本被 Supervisor 接管,我们在 /etc/supervisor/conf.d 目录创建其配置 hello.ini:
[program:hello]command=python /home/lihao/codes/python/hello.py stdout_logfile=/home/lihao/codes/python/hello.logstderr_logfile=/home/lihao/codes/python/hello_error.log需要指出的是,被 Supervisor 管理的进程,不能使用 daemon 模式,而必须在前台运行,否则会报错。
5. 运行 supervisord
由于我们需要使用指定目录下的 Supervisor 主配置文件,在运行 Supervisord 时,需要使用-c参数来指定主配置文件的路径:
supervisord -c /etc/supervisor/supervisord.conf6. 使用 supervisorctl 管理进程
使用 supervisorctl 可以查看监控的进程状态:
supervisorctl -c /etc/supervisor/supervisord.conf输出:
hello RUNNING pid 8475, uptime 7:59:46supervisor>可以看到,脚本 hello.py 已经运行了起来(当然使用 ps aux | grep hello也可以看到其进程信息)。打开文件 /home/lihao/codes/python/hello.log,可以看到文件中不断有”hello”输出。
在 supervisorctl 命令行下,也可以使用start,stop,restart,status,等命令来启动,关闭,重启,查看状态监控的进程,也可以输入help来查看命令帮助。限于篇幅,此处不再展开,详细的 supervisorctl 命令可以参考:http:///p/9abffc905645
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
一.Redis实现分布式Session管理1.Memcached管理机制2.Redis管理机制1.redis的session管理是利用spring提供的sess
一,简介Dockerfile运行只支持一条命令,当在Docker里要运行多条命令,用supervisor来管理就比较合适了。Supervisor是一个Pytho
金山毒霸如何使用进程管理器?金山毒霸的进程管理器,是利用了"互联网可信认证"技术的进程管理器,能够实时标注出系统中存在的木马、病毒、恶意软件等可疑与威胁进程,同
0>确保redis进程服务开启1>第一种:直接获取redis连接,通过redis.()方法测试连接,如果返回PONG则证明连接正常//1>jedis的入门代码案
本文实例讲述了VC++中进程与多进程管理的方法,分享给大家供大家参考。具体方法分析如下:摘要:本文主要介绍了多任务管理中的多进程管理技术,对进程的互斥运行、子进