安装使用supervisor

0 / 11

一、简介

supervisor 是一个基于 Python 开发的高级进程管理工具,它允许用户监控和控制类 Unix 系统上的进程。

可以将一个普通的命令行进程变为后台进程并进行监控和控制

二、安装

centos:
sudo yum install -y supervisor

ubuntu:
sudo apt-get install supervisor

三、编辑 supervisor 配置文件

sudo vim /etc/supervisord.conf
将 [unix_http_server] 和 [inet_http_server] 的一些注释去掉,如下:

[unix_http_server]
file=/var/run/supervisor/supervisor.sock   ; (the path to the socket file)
chmod=0700                 ; sockef file mode (default 0700)
;chown=nobody:nogroup       ; socket file uid:gid owner
;username=user              ; (default is no username (open server))
;password=123               ; (default is no password (open server))

[inet_http_server]         ; inet (TCP) server disabled by default
port=0.0.0.0: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 服务。

# 开启

sudo systemctl start supervisord

# 停止

sudo systemctl stop supervisord

# 重启

sudo systemctl restart supervisord

# 查看状态

sudo systemctl status supervisord

四、配置需要管理的程序

要管理特定的应用程序,通常的做法是为每个应用程序创建一个单独的配置文件。这些文件通常放在 /etc/supervisord.d/ 目录下,如果您想要配置一个名为 api 的应用程序,您可以创建一个名为 api.ini 的文件,内容如下:

[program:api]

directory=/home/aiqianji/api ; 程序所在目录

command=gunicorn main:app -w 4 --worker-class uvicorn.workers.UvicornWorker -b 0.0.0.0:12001 ; 程序启动命令

autostart=true ; 在supervisord启动的时候也自动启动

startsecs=10 ; 启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒

autorestart=true ; 程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启

startretries=3 ; 启动失败自动重试次数,默认是3

user=root ; 命令执行的用户 这里设置出错会导致权限问题,默认是root

priority=999 ; 进程启动优先级,默认999,值小的优先启动

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

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

stdout_logfile_backups = 10 ; stdout 日志文件备份数,默认是10

environment=VIRTUAL_ENV="/home/aiqianji/.conda/envs/aiset",PATH="/home/aiqianji/.conda/envs/aiset/bin:%(ENV_PATH)s",PYTHONPATH="/home/aiqianji/api" ; 设置环境变量。VIRTUAL_ENV指定了虚拟环境的路径,PATH变量被更新以包含虚拟环境中的bin目录,这样就可以在命令行中运行虚拟环境中的可执行文件。PYTHONPATH变量被设置为项目目录,以确保Python可以正确地导入项目中的模块。请注意,%(ENV_PATH)s是一个特殊变量,它会被替换为系统环境中的PATH变量,这样您就不会覆盖系统原有的PATH设置

; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
;
stdout_logfile=/var/log/img_random.log
;
; stopasgroup=false ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
;
; killasgroup=false ;默认为false,向进程组发送kill信号,包括子进程

五、重新读取和应用配置文件

当你在配置文件中添加了新的程序配置或者修改了现有程序的配置后,你需要运行这个命令来让这些更改生效,通常的步骤是:

使用 sudo supervisorctl reread 来重新读取配置文件。
使用 sudo supervisorctl update 来应用配置更改,并重启受影响的程序。
这两个步骤确保了 supervisor 管理的进程能够根据最新的配置文件运行。

sudo supervisorctl reread
sudo supervisorctl update

六、程序命令

# 启动

supervisorctl start api

# 停止

supervisorctl stop api

# 重启

supervisorctl restart api

# 状态

supervisorctl status api

七、web控制面板

如果启动成功 在浏览器输入 ip+端口,例:127.0.0.1:9001。