supervisor

发布时间 2023-07-10 11:01:00作者: whitesky-root

 

#停止所有进程
supervisorctl stop all
#停止程序 func 所有进程
supervisorctl stop func:*
#停止程序 func:nn_0 的进程 
supervisorctl stop func:nn_0

#启动所有进程
supervisorctl start all
#启动程序 func 所有进程
supervisorctl start func:*
#启动程序 func:nn_0 的进程 
supervisorctl start func:nn_0

#重启所有进程
supervisorctl restart all
#重启程序 func 所有进程
supervisorctl restart func:*
#重启程序 func:nn_0 的进程 
supervisorctl restart func:nn_0

#更新新的配置到supervisord
##新增配置并加载,不会重启原来已运行的程序;如果更改原有配置中的进程数,将会把之前的进程都重启掉
supervisorctl update

#重新启动配置中的所有程序
supervisorctl reload

#更新 func 程序中的进程数(numprocs),并且新增、减少进程数,都不会影响到之前的进程数
supervisorctl grace_update func

 

supervisorctl 是 Supervisor 的命令行工具,用于管理由 Supervisor 管理的进程。update 和 reload 都是 supervisorctl 的命令,它们的主要区别在于如何应用配置文件的更改。以下是它们的详细说明:

supervisorctl update
supervisorctl update 用于将 Supervisor 配置文件(通常是 /etc/supervisord.conf)中的更改应用到当前运行的 Supervisor 实例。当你对配置文件进行修改时,可以使用此命令来应用更改,而无需重启整个 Supervisor。它的行为如下:

检测已添加的新配置,启动新的进程。
检测已删除的配置,停止并删除相应的进程。
对于已更改的配置,先停止旧的进程,然后启动新的进程。
需要注意的是,supervisorctl update 只会应用那些与进程管理相关的更改,对于全局配置的更改(例如日志设置)无效。

supervisorctl reload
supervisorctl reload 用于重启 Supervisor 服务,该命令会先停止所有由 Supervisor 管理的进程,然后重新加载配置文件,并重新启动所有进程。这对于应用全局设置的更改非常有用。它的行为如下:

停止所有由 Supervisor 管理的进程。
重启 Supervisor,并重新加载配置文件。
启动所有由 Supervisor 管理的进程。
需要注意的是,supervisorctl reload 会导致所有进程短暂中断,因此可能会影响服务的可用性。

总结
使用 supervisorctl update 来应用与进程管理相关的配置更改,不会影响全局设置,且不会导致所有进程重启。
使用 supervisorctl reload 来应用包括全局设置在内的所有配置更改,但这会导致所有由 Supervisor 管理的进程重启。

 

配置说明:

[program:ai-langchat-api]
command=/data/python-venv/ai-langchat-api/bin/python3 /data/wwwroot/ai-langchat-api/src/app/qa_chat/run_qa_server.py --log_path=/data/logs/ai-langchat-api --svr_port=8080
numprocs=3
process_name=%(program_name)-%(process_num)d
directory=/data/wwwroot/ai-langchat-api/
autostart=true
autorestart=true
autoretrice=10
user=publish
environment=ENV="prod"
redirect_stderr=true
stdout_logfile=/data/logs/ai-langchat-api/ai-langchat-api.log
stopwatisecs=60
priority=994
stdout_logfile_maxbytes = 50MB

如果numprocs>1 则要定义process_name,不常用。一般只是管理主进程,多个进程的情况由程序自身管理维护