supervisor的简单使用
(一)supervisor的安装
(一)ubuntu安装 :
apt-get install supervisor
(二)centos安装 :
yum install supervisor
(三)pip形式安装:
pip install supervisor
ps:配置文件地址:/etc/supervisor/supervisord.conf,配置文件中注释符为 **;**而不是 #
(二)supervisor的结构
在你安装成功后,在/etc/supervisor/目录下会分别生成一个配置文件(supervisord.conf)和文件夹conf.d
(一)supervisord.conf配置文件:
supervisord.conf文件一般由下面6部分组成
(一)[unix_http_server]:
该部分一般就这样配置即可
[unix_http_server]
file=/var/run/supervisor.sock ; (the path to the socket file)
chmod=0700 ; sockef file mode (default 0700)
(二)[inet_http_server]:
[inet_http_server] ; HTTP 服务器,提供 web 管理界面
port=0.0.0.0:9001 ; Web 管理后台运行的 IP 和端口,如果开放到公网,需要注意安全性
username=root ; 登录管理后台的用户名
password=123 ; 登录管理后台的密码
(三)[supervisord]:
该部分一般就这样配置即可
[supervisord]
logfile = /tmp/supervisord.log # 日志路径
logfile_maxbytes = 50MB # 日志轮转之前可能消耗的最大字节数,为0代表无限日志大小
logfile_backups=10 # 日志轮换导致的备份数,为0代表不保留备份
loglevel = info # 日志级别(日志级别,有critical, error, warn, info, debug, trace, or blather等 默认为info。。。非必须设置项)
pidfile = /tmp/supervisord.pid # 保留其pid文件的位置
nodaemon = false # 如果为true,supervisord将在前台而不是守护进程启动。默认false
minfds = 1024 # 在supervisord将成功启动之前必须可用的文件描述符的最小数量,默认1024
minprocs = 200 # 在supervisord将成功启动之前必须可用的进程描述符的最小数量,默认200
umask = 022 # 超级过程的 umask。默认022
user = chrism # 指示 supervisord 在进行任何有意义的处理之前将用户切换到此UNIX用户帐户,默认不切换用户
identifier = supervisor # RPC接口使用的此supervisor进程的标识符字符串,默认supervisor
directory = /tmp # 当supervisord 守护进程时,切换到此目录
nocleanup = true # 防止supervisord在启动时清除任何现有的 AUTO 子日志文件,默认false
childlogdir = /tmp # 用于 AUTO 子日志文件的目录。
strip_ansi = false # 从子日志文件中剥离所有ANSI转义序列
environment = KEY1="value1",KEY2="value2" # 将被放置在 supervisord 进程环境中(以及作为其所有子进程的环境的结果)的 KEY="val",KEY2="val2" 形式的键/值对的列表。
(四)[supervisorctl]:
[supervisorctl]
serverurl=unix:////var/run/supervisor.sock ; 这个是supervisorctl本地连接supervisord的时候,本地UNIX socket路径,注意这个是和前面的[unix_http_server]对应的默认值就是unix:var/run/supervisor.sock。。非必须设置
#serverurl=http://127.0.0.1:9001 ; 这个是supervisorctl远程连接supervisord的时候,用到的TCP socket路径注意这个和前面的[inet_http_server]对应 默认就是http://0.0.0.0:9001。。。非必须项
username = root # 传递到supervisord服务器以用于身份验证的用户名(默认空。。非必须设置)
password = 123 # 要传递到Supervisord服务器以用于身份验证的密码(默认空。。非必须设置)
prompt = mysupervisor # 用作supervisorctl提示符的字符串
history_file = /tmp/his_file.log # 用作 readline 持久性历史记录文件的路径
(五)[rpcinterface:supervisor]:
这里默认这样配置就好
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
(六)[include]:
[include]
files = /etc/supervisor/conf.d/*.conf #对该目录下所有的进程进行管理
(二)文件夹conf.d:
该目录用来存放supervisord.conf下include节点的配置文件(一般是每个独立的进程一个独立的配置文件)
文件结构如下:
[program:项目名] #是应用程序的唯一标识,不能重复
directory = /home/user/project #进程目录
priority=999 # 程序在启动和关闭顺序中的相对优先级。数字越高,优先级越高
command = python xxx.py #执行程序的命令
autorestart = true #是否自动重启
user = user #启动的用户
redirect_stderr = true #把 stderr 重定向到 stdout,默认 false
stdout_logfile = stdout.log #异常日志
stderr_logfile = stderr.log #正常日志
loglevel = info #日志级别
#numprocs=10 ;进程数,注意:(相当于执行了10个command命令)
#process_name=%(program_name)s_%(process_num)02d
这里有两个参数需要注意,numprocs的数量为command命令执行的次数,默认为1,process_name默认为项目名,但是如果你numprocs参数不唯1,那么process_name就不能为一个固定值,因为process_name不能重复,还有你会发现一般会输出到stderr_logfile 对应的目录。
(三)配置实例
这里supervisord.conf配置文件就不用修改了,我们用supervisor维护uwsgi的进程,配置文件如下
[program:uwsgi]
priority=5
autostart=true
autorestart=true
startsecs=5 #如果启动5秒内进程都正常,视为正常启动
startretries=1 #在进程出异常后,尝试回复的次数
user=root
directory=/home/djangoProject/
#因为这里需要用到anaconda虚拟环境
command =bash -c "source activate && conda activate my_paddle && cd /home/djangoProject/ && uwsgi uwsgi.ini"
stdout_logfile=/home/djangoProject/uwsgi.log
stderr_logfile=/home/djangoProject/uwsgi.log
还有就是,这里uwsgi的配置文件中最好不要设置后台启用,否则supervisor会认为uwsgi没有启动成功
uwsgi配置文件实例
[uwsgi]
#启动:uwsgi uwsgi.ini
#停止: uwsgi --stop uwsgi.pid
socket = 127.0.0.1:8080
chdir = /home/djangoProject
wsgi-file = djangoProject/wsgi.py
processes = 1
threads = 4
pidfile=uwsgi.pid
#后台运行,并输出日志
#daemonize = /home/djangoProject/uwsgi.log
(四)web管理和周边命令
web管理,在浏览器输入ip:9001即可
周边命令:
supervisord -c /etc/supervisor/supervisord.conf 前台启动
supervisord -n -c /etc/supervisor/supervisord.conf 后台启动
supervisorctl stop program_name 停止某个进程
supervisorctl start program_name 启动某个进程
supervisorctl restart program_name 重启某个进程
supervisorctl stop all 停止全部进程
supervisorctl reload 载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程
supervisorctl update 根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启
(五)结语
补充:
https://blog.csdn.net/wc1695040842/article/details/103988813
https://blog.csdn.net/BLUE5945/article/details/80119248
如果有什么错误的地方,还请大家批评指正。最后,希望小伙伴们都能有所收获。码字不易,喜欢的话,点赞关注一波在走吧