首页 > 自考资讯 > 自考知识

supervisor守护你的进程

头条共创 2024-08-06

什么是supervisor

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

supervisor通过fork/exec的方式把被管理的进程当作supervisor的子进程来启动,这样只要在supervisor的配置文件中,把要管理的进程的可执行文件的路径写进去即可。

supervisor实现当子进程挂掉的时候,父进程可以准确获取子进程挂掉的信息的,可以选择是否自己启动和报警。

supervisor还提供了一个功能,可以为supervisord或者每个子进程,设置一个非root的user,这个user就可以管理它对应的进程。


安装

CentOS通过epel-release 安装

yum -y install epel-releaes

yum -y install supervisor

Ubuntu/Debian/Deepin 安装

apt update

apt -y install supervisor

通过pip安装

pip install supervisor


配置

supervisord.conf是给supervisord和supervisorctl读取使用的 ,可以使用echo_supervisord_conf生成默认配置文件。

如果在没有-c选项的情况下启动任一应用程序(用于明确告知应用程序配置文件名的选项),应用程序将按指定的顺序在以下位置查找名为supervisord.conf的文件。它将使用它找到的第一个文件:

./supervisord.conf

./etc/supervisord.conf

/etc/supervisord.conf

/etc/supervisor/supervisord.conf(自Supervisor 3.3.0起)

../etc/supervisord.conf(相对于可执行文件)

../supervisord.conf(相对于可执行文件)

生成配置文件:

echo_supervisord_conf > /etc/supervisord.conf


[unix_http_server] 设置

[unix_http_server]

file=/tmp/supervisor.sock ; socket的路径

;chmod=0700 ; socket的权限 (默认 0700)

;chown=nobody:nogroup ; socket的用户组

;username=user ; 验证用户(默认没有)

;password=123 ; 验证密码(默认没有)


[inet_http_server] 设置

提供一个http服务页面,可以对任务进行操作

;[inet_http_server]

;port=127.0.0.1:9001 ; ip_address:port specifier, *:port for all iface

;username=user ; default is no username (open server)

;password=123 ; default is no password (open server)

[supervisord] 设置

supervisord的相关配置,这个是最要的进程配置,如果在docker容器里面一般是修改配置文件nodaemon=true,不使用daemon方式运行程序,保证容器的存活。

[supervisord]

logfile=/tmp/supervisord.log ; main log file; default $CWD/supervisord.log

logfile_maxbytes=50MB ; max main logfile bytes b4 rotation; default 50MB

logfile_backups=10 ; # of main logfile backups; 0 means none, default 10

loglevel=info ; log level; default info; others: debug,warn,trace

pidfile=/tmp/supervisord.pid ; supervisord pidfile; default supervisord.pid

nodaemon=false ; start in foreground if true; default false

minfds=1024 ; min. avail startup file descriptors; default 1024

minprocs=200 ; min. avail process descriptors;default 200

;umask=022 ; process file creation umask; default 022

;user=chrism ; default is current user, required if root

;identifier=supervisor ; supervisord identifier, default is 'supervisor'

;directory=/tmp ; default is not to cd during start

;nocleanup=true ; don't clean up tempfiles at start; default false

;childlogdir=/tmp ; 'AUTO' child log dir, default $TEMP

;environment=KEY="value" ; key value pairs to add to environment

;strip_ansi=false ; strip ansi escape codes in logs; def. false


[include] 设置

include设置可以让我们分多个文件对不同的程序进行管理。此设置可以列出多个文件(由空白或换行分隔)。它还可以包含通配符。文件名被解释为相对于这个文件。包含的文件*不能包含文件本身。

;[include]

;files = relative/directory/*.ini


[program:x] 设置

这里是定义要守护进程的相关设置,如果多个程序,就设置多个配置段就可以了。

;项目名

[program:blog]

;脚本执行命令

command=/usr/bin/python /opt/bin/test.py

;supervisor启动的时候是否随着同时启动,默认True

autostart=true

;当程序exit的时候,这个program不会自动重启,默认unexpected,设置子进程挂掉后自动重启的情况,有三个选项,false,unexpected和true。如果为false的时候,无论什么情况下,都不会被重新启动;如果设置为true,就是只要进程退出就重启进程。

autorestart=false

;这个选项是子进程启动多少秒之后,此时状态如果是running,则我们认为启动成功了。默认值为1

startsecs=1

;这个选项是在启动失败后,重试多少次

startretries=3

;日志输出

stderr_logfile=/tmp/blog_stderr.log

stdout_logfile=/tmp/blog_stdout.log

;脚本运行的用户身份

user = opcai

;把 stderr 重定向到 stdout,默认 false

redirect_stderr = true

;stdout 日志文件大小,默认 50MB

stdout_logfile_maxbytes = 20M

;stdout 日志文件备份数

stdout_logfile_backups = 20


启动

如果是系统安装的包,一般都是有对应的服务文件,这里可以手动启动

supervisord -c /etc/supervisord.conf


任务控制

supervisorctl -c /etc/supervisord.conf

supervisor> help

default commands (type help <topic>):

=====================================

add exit open reload restart start tail

avail fg pid remove shutdown status update

clear maintail quit reread signal stop version

上面是命令行支持的命令

版权声明:本文转载于今日头条,版权归作者所有,如果侵权,请联系本站编辑删除

猜你喜欢