欢迎来真孝善网,为您提供真孝善正能量书籍故事!

高效Linux进程管理:Supervisor应用指南

时间:11-10 神话故事 提交错误

大家好,今天小编来为大家解答以下的问题,关于高效Linux进程管理:Supervisor应用指南,这个很多人还不知道,现在让我们一起来看看吧!

Supervisor安装与配置(linux/unix进程管理工具) Supervisor(Supervisor: A Process Control System)是一个用Python开发的客户端/服务器服务。它是Linux/Unix系统下的进程管理工具,不支持Windows系统。它可以轻松地监视、启动、停止和重新启动一个或多个进程。对于Supervisor管理的进程,当一个进程被意外杀死时,Supervisor在监听到该进程的死亡后会自动重新启动该进程。非常方便的实现进程的自动恢复功能。您不再需要自己编写shell 脚本来控制它。

由于Supervisor是用Python开发的,安装前请检查系统是否安装了Python 2.4及以上版本。下面介绍CentOS7.6和Python2.7.5环境下Supervisor的安装和配置步骤。

1. 实验环境

1. 系统

root@localhost:/data# cat /etc/redhat-release

CentOS Linux 版本7.7.1908(核心)2,Python 版本

root@localhost:/data# python -V

Python 2.7.5 如果Python版本低于2.6,请升级。下面贴出安装python3.6.8的安装示例。

百胜安装zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel -y libffi-devel

wget https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tar.xz

tar xf Python-3.6.8.tar.xz

cdPython-3.6.8

./configure --prefix=/usr/local/python368

进行安装

echo "导出PATH=/usr/local/python368/bin:$PATH" /etc/profile

源/etc/profile

python3 -V 2.安装Supervisor

安装Supervisor 的方法有很多种。下面介绍三者。我这里用的是第三个。

1.easy_install安装主管

安装Python包管理工具(easy_install) easy_install是setuptools包中包含的命令。使用easy_install实际上是调用setuptools来完成安装模块的工作,所以只需安装setuptools :

wget https://pypi.io/packages/source/s/setuptools/setuptools-33.1.1.zip

解压setuptools-33.1.1.zip

cd setuptools-33.1.1

python setup.py 安装

easy_installsupervisor2,pip安装supervisor

使用pip安装,前提是保证pip版本大于2.6

pip install Supervisor3、yum epel-release 安装Supervisor

yum install -y epel-release yum install -ysupervisor 3.supervisoro命令

Supervisor安装完成后,会生成三个执行程序:supervisord、supervisorctl、echo_supervisord_conf:

•supervisord:用于管理supervisor服务本身

•supervisorctl:用于管理我们需要委托给supervisoro工具的服务

•echo_supervisord_conf:用于生成supervisor配置文件

•Supervisor的守护进程服务(用于接收进程管理命令)

•客户端(用于与守护进程通信并发送管理进程的指令)

root@localhost:/data# 哪个主管

/bin/supervisord

root@localhost:/data#whichsupervisorctl

/bin/supervisorctl

root@localhost:/data# 其中echo_supervisord_conf

/bin/echo_supervisord_conf 4. 配置Supervisor

1. 通过运行echo_supervisord_conf程序生成supervisor的初始化配置文件。

如果使用yum安装,则省略此步骤,直接进入修改配置文件步骤。

mkdir /etc/supervisord.d

echo_supervisord_conf /etc/supervisord.conf2、修改配置文件

Supervisor配置文件中的内容较多,但很多内容无需修改即可使用。我这里只修改了以下两项。

#修改socket文件的模式,默认为0700

sed -i "s/;chmod=0700/chmod=0766/g" /etc/supervisord.conf

#在配置文件末尾添加以下两行以包含/etc/supervisord目录

sed -i "$a [包括]

files=/etc/supervisord.d/*.conf" /etc/supervisord.conf 5、写入需要Supervisor管理的进程

1. SMProxy由Supervisor管理

描述:

SMProxy是Swoole基于MySQL协议开发的MySQL数据库连接池。

它的原理是将数据库连接作为对象存储在内存中。当用户需要访问数据库时,会第一次建立连接。稍后,不再建立新的连接,而是从连接池中取出已建立的空闲连接对象。使用完毕后,用户并不关闭连接,而是将连接放回到连接池中,以供下次请求使用。连接的建立和断开由连接池本身管理。同时还可以通过设置连接的参数来控制连接池的初始连接数、连接的上下限、每个连接的最大使用次数、最大空闲时间等水池。它还可以通过自己的管理机制来监控数据库连接的数量、使用情况等。如果超过最大连接数,协程将被挂起,协程将被恢复,直到关闭连接才能继续运行。

特性

支持读写分离和数据库连接池,可以有效解决PHP带来的数据库连接瓶颈。支持SQL92标准,采用协程调度,支持多数据库连接、多数据库、多用户。灵活匹配,符合MySQL原生协议。跨语言、跨平台的通用中间件代理,支持MySQL。交易支持HandshakeV10。协议版本完美兼容MySQL5.5-8.0。它与所有主要框架兼容并无缝提高性能。官方网站:SMProxy

如果我们希望我们的SMProxy由Supervisor管理,我们需要在/etc/supervisord.d目录中编写一个配置文件。 SMProxy示例如下:

root@localhost:/data# cat /etc/supervisord.d/smproxy.conf

[程序:smproxy]

目录=/data/SMProxy

命令=/usr/local/php/bin/php /data/SMProxy/SMProxy start --console

自动启动=真

启动秒=3

自动重启=true

开始重试=3

用户=root

优先级=1

停止信号=INT

重定向_stderr=true

stdout_logfile_maxbytes=200MB

stdout_logfile_backups=100

stdout_logfile=/data/SMProxy/logs/catalina.out

stopasgroup=假

Killasgroup=false 说明:

#程序唯一名称

[程序:smproxy]

#程序路径

目录=/data/SMProxy

#运行程序的命令

命令=/usr/local/php/bin/php /data/SMProxy/SMProxy start --console

#supervisord启动后tomcat是否也启动?

自动启动=真

#如果启动3秒后没有异常退出,则说明进程正常启动。默认值为1 秒。

启动秒=3

#程序退出后自动重新启动。可选值:[意外、真、假]。默认是unexpected,即进程被意外杀死后会重新启动。这意味着,如果进程没有被supervisord关闭,就会被认为是非正常关闭,supervisord会重新启动该进程,并且只能使用supervisorctl来执行关闭、启动、重启等操作。

自动重启=true

#启动失败自动重试次数,默认3次

开始重试=3

#使用哪个用户来启动进程,默认是root

用户=root

#进程启动优先级,默认为999。如果Supervisord需要管理多个进程,则优先启动较小的值。

优先级=999

停止信号=INT

#将stderr重定向到stdout标准输出,默认false

重定向_stderr=true

#stdout 标准输出日志文件大小。当日志文件大小达到200M时,就会被截断。剪切日志文件将被标记为catalina.out1、catalina.out2、catalina.out3.默认为50MB。

stdout_logfile_maxbytes=200MB

#stdout标准输出日志文件备份数量,保存100 200MB日志文件,如果数量超过100,旧的会被删除,默认10个,保存10个

stdout_logfile_backups=100

#标准日志输出位置。如果输出位置不存在,则启动失败。

stdout_logfile=/data/SMProxy/logs/catalina.out

#默认为假。当进程被杀死时,是否向该进程组(包括子进程)发送停止信号

stopasgroup=假

#默认为false,向进程组发送kill信号,包括子进程

Killasgroup=false 使用supervisord管理启动进程后,当你使用/usr/local/php/bin/php /data/SMProxy/SMProxy stop 或kill $PID时,supervisord会认为是意外关闭,会自动关闭该进程再次处理。除非使用supervisord 命令关闭,否则将被拉起。

#启动supervisord进程。我们在配置文件中设置autostart=true参数。当supervisord启动时,smproxy也会启动。

root@localhost:/data#supervisord -c /etc/supervisord.conf

root@localhost:/data#

程序管理

supervisorctl status smproxy #smproxy 状态

Supervisorctl stop smproxy #停止smproxy

Supervisorctl start smproxy #启动smproxy

Supervisorctl restart smproxy #重启smproxy

Supervisorctl 重新加载smproxy

程序管理例子

root@localhost:/data#supervisorctl status smproxy

smproxy 运行pid 7098,正常运行时间0:41:20

root@localhost:/data#supervisorctl stop smproxy

smproxy: 已停止

root@localhost:/data#supervisorctl 启动smproxy

smproxy: 已启动

root@localhost:/data# /data/SMProxy/SMProxy 状态

SMProxy[v1.3.1] - Linux localhost.localdomain 3.10.0-957.12.2.el7.x86_64 #1 SMP 5 月14 日星期二21:24:32 UTC 2019 x86_64

主机: 0.0.0.0,端口: 3366,PHPVerison: 7.3.11

Swoole版本: 4.4.17,WorkerNum: 2

进程: 总共24 个,22 个休眠,2 个查询

+-----+------+------------------+---------+-------- - -+------+------------+---------------------------- ---- +----------------+--------------------+----- --- -------+----------------+

|身份证|用户|主持人|数据库|命令|时间|状态|信息|服务器版本| PLUGIN_NAME |服务器状态|服务器密钥|

+-----+------+------------------+---------+-------- - -+------+------------+---------------------------- ---- +----------------+--------------------+----- --- -------+----------------+

| 191 | 191根|本地主机:54674 |测试数据库|睡眠| 75 | 75 | | 8.0.13 | mysql_native_password | mysql_native_password | 2 |写SMtest_db |

| 192 | 192根|本地主机:54680 |测试数据库|睡眠| 75 | 75 | | 8.0.13 | mysql_native_password | mysql_native_password | 2 |写SMtest_db |

| 193 | 193根|本地主机:54682 |测试数据库|睡眠| 75 | 75 | | 8.0.13 | mysql_native_password | mysql_native_password | 2 |写SMtest_db |

| 195 | 195根|本地主机:54688 |测试数据库|查询| 0 |执行| /*SMProxy进程列表sql*/| 8.0.13 | mysql_native_password | mysql_native_password | 2 |写SMtest_db |

| 196 | 196根|本地主机:54692 |测试数据库|睡眠| 75 | 75 | | 8.0.13 | mysql_native_password | mysql_native_password | 2 |读取SMtest_db |

| 197 | 197根|本地主机:54696 |测试数据库|睡眠| 75 | 75 | | 8.0.13 | mysql_native_password | mysql_native_password | 2 |读取SMtest_db |

| 198 | 198根|本地主机:54700 |测试数据库|睡眠| 75 | 75 | | 8.0.13 | mysql_native_password | mysql_native_password | 2 |读取SMtest_db |

| 199 | 199根|本地主机:54704 |测试数据库|睡眠| 75 | 75 | | 8.0.13 | mysql_native_password | mysql_native_password | 2 |读取SMtest_db |

| 200 | 200根|本地主机:54708 |测试数据库|睡眠| 75 | 75 | | 8.0.13 | mysql_native_password | mysql_native_password | 2 |读取SMtest_db |

| 201 | 201根|本地主机:54712 |测试数据库|睡眠| 75 | 75 | | 8.0.13 | mysql_native_password | mysql_native_password | 2 |读取SMtest_db |

| 202 | 202根|本地主机:54716 |测试数据库|睡眠| 75 | 75 | | 8.0.13 | mysql_native_password | mysql_native_password | 2 |读取SMtest_db |

| 203 | 203根|本地主机:54720 |测试数据库|睡眠| 75 | 75 | | 8.0.13 | mysql_native_password | mysql_native_password | 2 |读取SMtest_db |

| 204 | 204根|本地主机:54724 |测试数据库|睡眠| 75 | 75 | | 8.0.13 | mysql_native_password | mysql_native_password | 2 |读取SMtest_db |

| 205 | 205根|本地主机:54728 |测试数据库|睡眠| 75 | 75 | | 8.0.13 | mysql_native_password | mysql_native_password | 2 |读取SMtest_db |

| 206 | 206根|本地主机:54732 |测试数据库|睡眠| 75 | 75 | | 8.0.13 | mysql_native_password | mysql_native_password | 2 |读取SMtest_db |

| 207 | 207根|本地主机:54736 |测试数据库|睡眠| 75 | 75 | | 8.0.13 | mysql_native_password | mysql_native_password | 2 |读取SMtest_db |

| 208 | 208根|本地主机:54740 |测试数据库|睡眠| 75 | 75 | | 8.0.13 | mysql_native_password | mysql_native_password | 2 |读取SMtest_db |

| 209 | 209根|本地主机:54744 |测试数据库|睡眠| 75 | 75 | | 8.0.13 | mysql_native_password | mysql_native_password | 2 |读取SMtest_db |

| 210 | 210根|本地主机:54748 |测试数据库|睡眠| 75 | 75 | | 8.0.13 | mysql_native_password | mysql_native_password | 2 |读取SMtest_db |

| 211 | 211根|本地主机:54752 |测试数据库|睡眠| 75 | 75 | | 8.0.13 | mysql_native_password | mysql_native_password | 2 |读取SMtest_db |

| 212 | 212根|本地主机:54756 |测试数据库|睡眠| 75 | 75 | | 8.0.13 | mysql_native_password | mysql_native_password | 2 |读取SMtest_db |

| 213 | 213根|本地主机:54760 |测试数据库|睡眠| 75 | 75 | | 8.0.13 | mysql_native_password | mysql_native_password | 2 |读取SMtest_db |

| 214 | 214根|本地主机:54764 |测试数据库|查询| 0 |执行| /*SMProxy进程列表sql*/| 8.0.13 | mysql_native_password | mysql_native_password | 2 |读取SMtest_db |

| 215 | 215根|本地主机:54766 |测试数据库|睡眠| 75 | 75 | | 8.0.13 | mysql_native_password | mysql_native_password | 2 |读取SMtest_db |

+-----+------+------------------+---------+-------- - -+------+------------+---------------------------- ---- +----------------+--------------------+----- --- -------+----------------+当supervisord已经开始运行时,再次运行supervisord -c /etc/supervisord.conf会报错。

root@localhost:/data#supervisord -c /etc/supervisord.conf

Error: 另一个程序已在侦听我们的HTTP 服务器之一配置使用的端口。在启动supervisord 之前先关闭该程序。

如需帮助,请使用/bin/supervisord -h 如果您想重新启动supervisord,只需杀死supervisord并重新启动它:

root@localhost:/data# ps -ef | grep 主管

根7059 1 0 19:18 ? 00:00:00 /usr/bin/python /bin/supervisord -c /etc/supervisord.conf

根7291 5986 0 20:13 pts/0 00:00:00 grep --color=autosupervisord

root@localhost:/data#kill -s SIGTERM 7059

用户评论

艺菲

我一直想试试Supervisor,听说可以自动启动和监控进程,很理想啊!

    有7位网友表示赞同!

安之若素

在开发环境中使用Supervisor是不是会比较方便?

    有7位网友表示赞同!

∞◆暯小萱◆

我有个需要定时运行的任务,用Supervisor会不会轻松很多?

    有6位网友表示赞同!

ˉ夨落旳尐孩。

请问Supervisor支持哪些类型的脚本或程序?

    有13位网友表示赞同!

杰克

对于新手来说,学习Supervisor的难度怎么样?

    有20位网友表示赞同!

ヅ她的身影若隐若现

Linux服务器上使用Supervisor有什么需要注意的吗?

    有13位网友表示赞同!

墨城烟柳

有没有什么好用的supervisor配置文件模板可以分享吗?

    有12位网友表示赞同!

遗憾最汹涌

Supervisor的日志记录功能比较完善吗?方便查看历史问题。

    有20位网友表示赞同!

野兽之美

我想了解一下 Supervisor 和其他进程管理工具 (比如 monit ) 的区别?

    有8位网友表示赞同!

信仰

用Supervisor管理多个项目,是否能做到灵活切换?

    有16位网友表示赞同!

淡淡の清香

Supervisor 是否支持并发执行任务?

    有15位网友表示赞同!

心悸╰つ

在使用Supervisor时,是如何实现远程监控和管理的?

    有8位网友表示赞同!

拉扯

我听说Supervisor可以根据进程状态自动执行操作,是真的吗?

    有17位网友表示赞同!

醉红颜

能否用Supervisor来管理数据库进程等非脚本类型的程序?

    有12位网友表示赞同!

自繩自縛

想知道Supervisor有哪些扩展插件,有哪些功能特别强大?

    有12位网友表示赞同!

玻璃渣子

想了解更多关于Supervisor的最佳实践,有什么资源可以推荐吗?

    有16位网友表示赞同!

龙吟凤

使用Supervisor可以提高服务器的稳定性和安全性吗?

    有13位网友表示赞同!

相知相惜

Supervisor在实际生产环境中被广泛应用吗?

    有7位网友表示赞同!

哽咽

有没有什么在线学习 Supervisor 的教程或课程?

    有17位网友表示赞同!

抚笙

我目前是在Windows系统下开发,是否可以考虑用 supervisor 管理 Linux 服务器上的进程?

    有17位网友表示赞同!

【高效Linux进程管理:Supervisor应用指南】相关文章:

1.蛤蟆讨媳妇【哈尼族民间故事】

2.米颠拜石

3.王羲之临池学书

4.清代敢于创新的“浓墨宰相”——刘墉

5.“巧取豪夺”的由来--米芾逸事

6.荒唐洁癖 惜砚如身(米芾逸事)

7.拜石为兄--米芾逸事

8.郑板桥轶事十则

9.王献之被公主抢亲后的悲惨人生

10.史上真实张三丰:在棺材中竟神奇复活