supervisor 配置 安装
#停止所有进程 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,不常用。一般只是管理主进程,多个进程的情况由程序自身管理维护
supervisor安装
# yum install epel-release
# yum install -y supervisor
# systemctl enable supervisord
# 开机自启动
# systemctl start supervisord
# 启动supervisord服务
# systemctl status supervisord
# 查看supervisord服务状态
# ps -ef|grep supervisord # 查看是否存在supervisord进程
http://supervisord.org/configuration.html 官方文档:
command: 必须是非守护进程
如果supervisor中的配置 : command 使用的shell脚本拉起业务进程, 注意额外配置如下:否则可能出现孤儿进程
stopasgroup=true ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
killasgroup=true ;默认为false,向进程组发送kill信号,包括子进程
[group:tornados] programs=tornado-0,tornado-1,tornado-2 [program:tornado-0] # 进程要执行的命令 command=sh -x /data/wwwroot/mongo-zjx-recomm-2-api/script/zjx/start_zjx_svr.sh --port 8182 directory=/data/wwwroot/mongo-zjx-recomm-2-api/ autostart=true autorestart=true startsecs=10 startretries=3 exitcodes=0,2 environment=ENV="test" user=publish numprocs=1 redirect_stderr=true stdout_logfile=/data/logs/mongo-zjx-recomm-2-api/mongo-zjx-recomm-2-api.log stopwaitsecs=60 priority=994 stdout_logfile_maxbytes=50MB stdout_logfile_backups=10 [program:tornado-1] command=sh -x /data/wwwroot/mongo-zjx-recomm-3-api/script/zjx/start_zjx_svr.sh --port 8183 #process_name=%(program_name)s-%(process_num)d directory=/data/wwwroot/mongo-zjx-recomm-3-api/ autostart=true autorestart=true startsecs=10 startretries=3 exitcodes=0,2 environment=ENV="test" user=publish numprocs=1 redirect_stderr=true stdout_logfile=/data/logs/mongo-zjx-recomm-3-api/mongo-zjx-recomm-3-api.log stopwaitsecs=60 priority=994 stdout_logfile_maxbytes=50MB stdout_logfile_backups=10 [program:tornado-2] command=sh -x /data/wwwroot/mongo-zjx-recomm-3-api/script/zjx/start_zjx_svr.sh --port 8184 #process_name=%(program_name)s-%(process_num)d directory=/data/wwwroot/mongo-zjx-recomm-3-api/ autostart=true autorestart=true startsecs=10 startretries=3 exitcodes=0,2 environment=ENV="test" user=publish numprocs=1 redirect_stderr=true stdout_logfile=/data/logs/mongo-zjx-recomm-3-api/mongo-zjx-recomm-3-api.log stopwaitsecs=60 priority=994 stdout_logfile_maxbytes=50MB stdout_logfile_backups=10 ~ 上面的配置supervisor加载成功后, supervisorctl update supervisorctl start all supervisorctl start tornado-0 supervisorctl start tornado-1 supervisorctl start tornado-2