supervisor添加进程,进程守护 supervisor
主管介绍
Supervisor是一套用Python开发的通用进程管理程序,可以把一个普通的命令行进程变成后台守护进程,监控进程状态,异常退出时自动重启。它通过fork/exec的方式将这些被管理的进程作为supervisor的子进程启动,所以只要将被管理的进程的可执行文件的路径写入supervisor的配置文件中。它还实现了当子进程挂起时,父进程可以准确获取子进程挂起的信息,并可以自行选择是否启动和报警。
http://supervisord.org/installing.html官方网站
最后,pip可以在Python3下正常安装。
由于Supervisor是用Python开发的程序,请在安装之前确保系统上安装了Python。
PIP supervisor安装后会生成三个执行程序:supervisortd、supervisorctl、e cho_supervisord_conf,分别是supervisor的守护进程服务(用于接收进程管理命令)、客户端(用于与守护进程通信和发送管理进程的指令)和生成初始配置文件的程序。
生成配置文件:
市场总监主管
cd主管/
echo _ supervisor d _ conf supervisor d . conf配置文件:
[UNIX http服务器]
file=/tmp/supervisor . sock;UNIX套接字文件,supervisorctl将使用该文件与supervisord进行通信.
;chmod=0700套接字文件的模式默认为0700。
;chown=nobody:no group;套接字文件的所有者,格式:uid:gid
;[inet _ http _ server];HTTP服务器,提供web管理接口
;端口=127 . 0 . 0 . 1:9001;管理在后台运行的Web的IP和端口。如果是对公网开放,需要注意安全。
;用户名=用户;登录后台的用户名。
;密码=123;登录后台的密码。
[超级管理员]
log file=/tmp/supervisord . log;日志文件,默认为$ $ CWD/super visor . log
logfile _ maxbytes=50MB默认情况下,超过will rotate的日志文件大小为50MB。如果设置为0,则表示没有大小限制。
logfile _ backups=10日志备份的默认数量是10,将其设置为0表示没有备份。
loglevel=info日志级别、默认信息、其他:调试、警告、跟踪
PID file=/tmp/supervisord . PID;Pid文件
nodaemon=false是否在前台启动,默认为false,即以守护模式启动。
minfds=1024可以打开的文件描述符的最小值,默认值是1024。
minprocs=200默认情况下,可以打开的最小进程数是200。
[监督员]
server URL=UNIX:///tmp/supervisor . sock;通过UNIX socket连接supervisord,路径与unix_http_server段中的文件一致。
;server URL=http://127 . 0 . 0 . 1:9001;通过HTTP连接到supervisord
;[program:xx]是被管理进程的配置参数,xx是进程的名称。
[程序:xx]
command=/opt/Apache-Tomcat-8 . 0 . 35/bin/catalina . sh运行;程序开始命令
autostart=true当supervisord启动时,它也会自动启动。
startsecs=10如果启动10秒后没有异常退出,说明进程正常启动,默认值为1秒。
autorestart=true程序退出后会自动重启。可选值:[意外,真,假]。默认值是意外的,这意味着进程在被意外终止后将重新启动。
开始重试次数=3;默认情况下,失败的自动重试次数为3。
user=tomcat哪个用户启动该进程,默认为root。
优先级=999;启动优先级,默认为999,较小的先启动。
redirect _ stderr=true将stderr重定向到stdout,默认为false
stdout _ logfile _ maxbytes=20MB标准输出日志文件大小,默认为50MB
stdout _ logfile _ backups=20stdout日志文件的备份数量,默认值为10。
;Stdout日志文件,请注意,指定目录不存在时无法正常启动,需要手动创建目录(supervisord会自动创建日志文件)
stdout _ log file=/opt/Apache-Tomcat-8 . 0 . 35/logs/catalina . out
stopasgroup=false默认值为false,表示当一个进程被终止时,是否向该进程组(包括子进程)发送停止信号。
killasgroup=false默认值为false,kill信号被发送到进程组,包括子进程。
;包括其他配置文件。
;[包括]
;files=相对/目录/*。ini可以指定一个或多个以结尾的配置文件。ini。
示例配置:
[程序:花]
command=/root/python _ envs/celery _ project/bin/celery-A celery _ task。芹菜花-地址=0。0 .0 .0-port=5555-basic _ auth=admin:zxing。112233;程序(相对用路径,可以带参数)
process _ name=%(program _ name)s;进程名表达式(默认为%(程序名)s)
num procs=1;要启动的进程副本数(定义1)
directory=/root/python-projects/test-project/celery _ project;高级管理人员之前粗木质残体到的目录(定义无cwd)
优先级=999;相对启动优先级(默认为999)
自动启动=真从超级用户开始(默认值:真)
启动ECS=1;程序必须保持运行的秒数(定义。1)
开始重试次数=3;启动时串行启动失败的最大次数(默认为3)
自动重启=意外;如果运行后退出,何时重新启动(定义:意外)
退出代码=0;与自动重启一起使用的"预期"退出代码(默认值为0)
重定向_ stderr=false将过程标准错误重定向到标准输出(默认为假)
stdout _ log file=/etc/supervisor/logs/flower _ stdout。日志;标准输出日志路径,无对无。默认自动
标准输出日志文件最大字节数=10MB最大日志文件字节数b4循环(默认为50MB)
标准输出日志文件备份=10st输出日志文件备份的数量(0表示无,默认为10)
标准输出捕获最大字节数=1MB "捕获模式"中的字节数(默认值为0)
标准输出事件启用=假在标准输出写入时发出事件(默认为假)
stdout _ syslog=false将带有进程名称的标准输出发送到系统日志(默认为假)
stderr _ log file=/etc/supervisor/logs/flower _ stderr。日志;标准错误日志路径,无对无。默认自动
stderr _ logfile _ maxbytes=10MB最大日志文件字节数b4循环(默认为50MB)
stderr _ logfile _ backups=10stderr日志文件备份的数量(0表示无,默认为10)
stderr _ capture _ maxbytes=1MB捕获模式"中的字节数(默认值为0)
标准错误_系统日志=假将标准错误与进程名称一起发送到系统日志(默认为假)
用户=根
配置管理进程进程管理配置参数,不建议全都写在s upervisord.conf文件中,建议每个进程写一个配置文件,并放在包括配置块中文件指定的目录下,通过我包括包含进supervisord.conf文件中。
修改配置文件:
(it nest)root @ PxeCtrlSys:/home/user/it nest/Supervisor # vim supervisord。主配置文件
# 最后加上
[包括]
;文件=相对/目录/*。初始化设置文件的后缀名
files=/home/user/it nest/Supervisor/* .初始化设置文件的后缀名
# 注意点:一定开启包括
启动监督者服务(it nest)root @ px ctrl sys:/home/user/it nest/Supervisor # supervisord-c supervisord。主配置文件
(it nest)root @ px ctrl sys:/home/user/it nest/Supervisor # tail/tmp/web socket。原木管理用户进程交互终端超级监管者启动成功后,通过监督员客户端来管理用户进程:启动、停止、重启。运行监督员命令,会进入监督者客户端的交互终端,并会列出当前所管理的所有进程。
输入救命啊,可以查看命令列表。如果想看某个命令的作用,运行"救命命令名称",如帮助阻止达芙妮表示停止达芙妮进程,全部停止表示停止所有进程
监督员管理:
命令
说明
救命啊
打印可用操作的列表
帮助操作
打印帮助行为
添加姓名[.]
激活进程/组配置中的任何更新
删除姓名[.]
从活动配置中删除进程/组
更新
重新加载配置和添加/删除必要的,并将重新启动受影响的程序
全部更新
重新加载配置和添加/删除必要的,并将重新启动受影响的程序
更新名称[.]
更新特定的组,并将重新启动受影响的程序
清除名称
清除进程的日志文件
清除名称名称
清除多个进程的日志文件
全部清除
清除所有进程的日志文件
细粒过程
连接到前台模式下的进程,按拷贝退出前台
pid
得到主控制器的PID
pid名称
按名称获取单个子进程的PID
pid全部
获取每个子进程的PID,每行一个
重新加载
重新启动远程监控程序
重读
重新加载守护进程的配置文件,无需添加/删除(无需重新启动)
重启名称
重启进程,注意:重新启动不会重新读取配置文件。对此,请参阅重读和更新
重新启动gname :*
重启组内所有进程,注意:重新启动不会重新读取配置文件。对此,请参阅重读和更新
重启名称名称
重新启动多个进程或组,注意:重新启动不会重新读取配置文件。对此,请参阅重读和更新
全部重启
重启所有进程,注意:重新启动不会重新读取配置文件。对此,请参阅重读和更新
信号
开始名称
启动进程
开始gname :*
在一个组中启动所有进程
开始名称名称
启动多个进程或组
全部开始
开始所有进程
状态
获取所有进程状态信息
状态名称
按名称获取单个进程的状态
状态名称名称
获取多个已命名进程的状态
停止名称
停止一个进程
停止咬牙切齿:*
停止组中的所有进程
停止名称名称
停止多个进程或组
全部停止
停止所有进程
` tail [-f] name [stdout
stderr](默认标准输出)`
输出进程日志的最后一部分,例如:尾部-f名称按Ctrl-C退出尾数-100名称最后100个字节的进程
非交互命令操作:
(it nest)root @ PxeCtrlSys:/home/user/it nest/Supervisor # supervisorctl-c supervisord。会议重启
错误:重新启动需要一个进程名
重启重启一个进程
重新启动:*重新启动组中的所有进程
重启重启多个进程或组
重启所有重启所有进程
注意:重新启动不会重新读取配置文件。为此,请参见重新读取和更新。
(it nest)root @ PxeCtrlSys:/home/user/it nest/Supervisor # Supervisor CTL-c Supervisor/Supervisor or。会议重启全部
停止了
开始了
(it nest)root @ px ctrl sys:/home/user/it nest/Supervisor # supervisorctl-c supervisord。确认停止
(it nest)root @ px ctrl sys:/home/user/it nest/Supervisor # supervisorctl-c supervisord。会议开始重启超级监管者服务:
监督控制重新加载网管理界面
出于安全考虑,默认配置没有开启网管理界面,需要修改supervisord.conf配置文件,以打开超文本传送协议(超文本传输协议的缩写)访权限。
修改配置将下面的配置
;[inet _ http _ server];默认情况下inet (TCP)服务器被禁用
;端口=127 .0 .0 .1:9001;ip地址:端口说明符,*:所有接口的端口
;用户名=用户;默认为无用户名(开放服务器)
;密码=123;默认为无密码(开放服务器)修改为:
[inet _ http _ server];默认情况下inet (TCP)服务器被禁用
端口=0 .0 .0 .0:9001;ip地址:端口说明符,*:所有接口的端口
用户名=用户;默认为无用户名(开放服务器)
password=user@user.com;默认为无密码(开放服务器)浏览器访问IP:9001
重启监督者服务
(it nest)root @ PxeCtrlSys:/home/user/it nest/Supervisor # Supervisor CTL关闭
停工
(it nest)root @ px ctrl sys:/home/user/it nest/Supervisor # supervisord-c supervisord。主配置文件
一键搞定:管理员控制重新加载
设置开机启动
启动脚本守护程序-重新加载#重新加载启动脚本配置
启动脚本启用supervisord.service #设置开机启动
启动脚本禁用supervisord.service #禁止开机启动
系统CTL是-活动管理程序。服务编号(仅显示是否活动)
系统CTL列表-单位-类型=服务编号显示所有已启动的服务
启动脚本已启用supervisord.service验证一下是否为开机启动
问题:
1.
服务器需要验证
错误:类" xmlrpc.client.ProtocolError ",127.0.0.1的协议错误/RPC 2:401未经授权:file:/data/python _ envs/es-service/lib/python 3.7/site-packages/supervisor/xmlr
pc.py行:545
场景:执行命令:监控关闭之后
这是因为开启了权限验证导致,可以通过执行监督员回车输入用户名密码进入之后进行关机操作
2.
http://本地主机:9001拒绝连接启动方式:
超级监管者。主配置文件服务加入系统:
添加服务配置vim/lib/systemd/system/supervisor。服务
[单位]
描述=主管
After=network.target
[服务]
类型=分叉
ExecStart=/data/python _ envs/es-service/bin/supervisord-c/data/Supervisor/supervisord。主配置文件
ExecStop=/data/python _ envs/es-service/bin/supervisor CTL $ OPTIONS关闭
exec reload=/data/python _ envs/es-service/bin/supervisor CTL $ OPTIONS reload
KillMode=进程
重启=开-失败
重启秒=42秒
[安装]
WantedBy=多用户。目标设置文件权限:chmod 766 supservisor.service
3 .为创建调度程序时出现未知错误
原因是日志文件权限问题,指定具体输出文件并设置对应的日志权限即可
4.unix:///tmp/supervisor.sock没有这样的文件的问题
今天使用监督员命令,报出以上的错误信息,这是由于Linux操作系统操作系统会定期清理/tmp目录下的文件导致
解决:
1)修改配置文件
vim /etc/supervisord.conf
这里把所有的/tmp路径改掉,
/tmp/supervisor.sock改成/var/run/supervisor.sock,
/tmp/supervisord.log改成/var/log/supervisor.log,
/tmp/supervisord.pid改成/var/run/supervisor.pid 2)修改权限
chmod 777/运行
chmod 777 /var/log 3)创建主管。袜子
touch /var/run/supervisor.sock
chmod 777/var/run/supervisor。袜子4)启动超级坏蛋,注意停止之前的实例或杀死进程
超级遮阳板d-c/etc/超级遮阳板d . conf
5.
错误:无法打开超文本传送协议服务器:套接字。报告的错误错误号ENOENT (2)启动超级监管者服务的时候出现的错误
原因:这是因为默认配置中的目录不存在(我的之前配置的是var/run下的一个超级监管者目录下的文件,由于服务重启目录被删除,所以需要首先创建该目录),配置【unix_http_server】文件配置项
mkdir -p /var/run/supervisord
然后执行启动服务启动命令即可
超级遮阳板d-c/etc/超级遮阳板d/超级遮阳板d . conf
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。