supervisor的简单使用

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
supervisor的简单使用

(一)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即可
supervisor的简单使用

周边命令:
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

如果有什么错误的地方,还请大家批评指正。最后,希望小伙伴们都能有所收获。码字不易,喜欢的话,点赞关注一波在走吧

supervisor的简单使用

上一篇:Node.js HTTP模块、URL模块 supervisor工具


下一篇:linux系统进行supervisor安装使用