1.简介
supervisor是由python开发的进程管理工具,可以帮助我们更好的管理进程
在以后的项目部署中,我们可能需要手动的启停每一个进程,如nginx+uwsgi+django+mysql,supervisor可以帮助我们一键启停
进程管理难点:
1. 每个进程的管理需要指定的命令操作,易忘记
在linux中,传统的服务管理方式是通过命令行的方式进行 如
sudo service mysql status # 查看服务状态
sudo service mysql start # 启动mysql服务
2. 进程可能会异常退出,我们希望在退出后自动重启
我们可以使用supervisor 很方便的管理指定的服务,并且可以在服务退出后自动重启
supervisor进程的管理服务的核心组成:
1. supervisord: 服务的主要管理器,运行supervisor会启动supervisord的进程,负责启动所管理的进程,并将所管理的进程作为子进程来启动,在管理的进程中如果崩溃会自动重启
2. supervisorctl: 服务的客户端命令工具,可以执行stop,start,restart等命令。来管理子进程
3. web server: 是服务的网页可视化界面,提供接口,可以通过web界面查看和控制进程状态
4. xml-rpc interface: 服务域web server的同一个http服务,可以用来询问和控制管理程序及其他运行的程序
最后:supervisor是运行在linux环境中的,如果希望在windows中也希望通过工具来批量管理进程,可以使用supervisor-win工具
2.配置
2.1 安装
sudo apt install supervisor
或者
pip install supervisor
或者通过 执行 echo_supervisord_conf 来查看默认配置信息
2.2 生成配置文件
supervisor进程管理服务程序安装完成之后,会在系统中生成两个主要的配置文件
1. /etc/supervisor/supervisord.conf :主进程配置文件
2. /etc/supervisor/supervisord.d :子进程配置文件所在目录
一般在实际开发中,两种配置文件都是需要配置的
生成主配置文件
配置文件目录是可以自定义的
echo_supervisord_conf > /etc/supervisord.conf
生成子进程配置文件信息
一般将所有需要管理的子进程配置文件放在一起,进行统一管理
mkdir /etc/supervisord.d/ -p # 创建文件夹
cd /etc/supervisord.d/
# 编写子进程配置文件
touch nginx.ini
touch uwsgi.ini
touch mysql.ini
touch redis.ini
主进程常用配置信息
配置区域 | 配置信息 | 说明 |
[unix_http_sever] | file=/tmp/supervisor.sock | socket套接字,用户客户端和服务端建立本地连接 |
chmod=0700 | socket文件权限设置,默认是0700 | |
chown=nobody:nogroup | socket文件属主 | |
[inet_http_server] | port=127.0.0.1:9001 | web管理后台运行的IP和Port |
username=user | 登录管理后台运行的用户名 | |
password=123 | 登录管理后台运行的密码 | |
[supervisord] | logfile=/tmp/supervisord.log | 服务运行的日志文件 |
logfile_maxbytes=50MB | 日志文件大小,超出会rotate,设置为0,代表不限制大小 | |
logfile_backups=10 | 日志文件备份数量。0表示不备份 | |
loglevel=info | 日志级别,其他:debug,warn,trace | |
[program:xxx] | command=/bin/cat | 启动程序命令 |
autostart=true | 自动启动 | |
startsecs=1 | 启动1秒后没有异常退出就正常启动 | |
autorestart=unexpected | 程序退出后自动重启[unexpected, true,false] ,unexpected代表进程意外杀死后才重启 | |
startretries=3 | 启动失败自动重试次数 | |
user=chrism | 用哪个用户启动进程,可以设置为root | |
priority=999 | 进程启动优先级,值越小越优先启动 | |
redirect_stderr=true | 把stderr重定向到stdout,默认为false | |
stdout_logfile=/a/path | stdout日志路径 | |
stdout_logfile_maxbytes=1MB | 日志文件大小 | |
stdout_logfile_backups=10 | 日志备份数量 | |
stderr_logfile=/a/path | stderrt日志路径 | |
stderr_logfile_maxbytes=1MB | 日志文件大小 | |
stderr_logfile_backups=10 | 日志备份数量 | |
stopasgroup=false | 进程被杀死,是否想进程组发送stop的信号,包括子进程 | |
killasgroup=false | 向进程组发送kill信号 | |
[include] | files | 可以指定一个或者多个以.ini结束的配置文件 |
子进程配置文件信息
nginx.ini
[program:nginx]
command=/opt/nginx162/sbin/nginx -c /opt/nginx162/conf/nginx.conf -g 'daemon off;'
autostart=true
autorestart=true
startsecs=1
redirect_stderr=false
stderr_logfile=/tmp/logs/nginx/stderr.log
stdout_logfile=/tmp/logs/nginx/stdout.log
stopasgroup=true ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
killasgroup=true
当然还可以指定该服务产生日志的目录位置
redis.ini
[program:redis] command= /usr/bin/redis-server /etc/redis/redis.conf autostart=true autorestart=true startsecs=1 redirect_stderr=false stderr_logfile=/tmp/logs/redis/stderr.log stdout_logfile=/tmp/logs/redis/stdout.log stopasgroup=true ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程 killasgroup=true startsecs=10 stopwaitsecs = 600 priority=10
注意 需要将/etc/redis/redis.conf中的 daemonize yes设置为no 关闭自身守护,改用supervisor执行守护;
2.3 进程管理服务命令使用
supervisorctl status 查看所有进程状态
supervisorctl stop es 停止es 服务程序
supervisorctl start es 启动es服务城西
supervisorctl restart 重启es服务
supervisorctl update 配置文件修改之后使用该命令加载新的配置
supervisorctl reload 重新启动配置中的所有程序
或者使用supervisorctl 进入shell交互界面
supervisorctl -c /etc/supervisord.conf (venv) [root@s25linux tf_crm]# supervisorctl -c /etc/supervisord.conf crm RUNNING pid 41451, uptime 0:01:34 supervisor> supervisor>start s25crm # 启动任务 supervisor>stop s25crm # 停止任务 supervisor>status # 任务状态 supervisor>start all # 开启都有任务 supervisor>stop all # 终止所有任务
2.4 启动
supervisord -c /etc/supervisord.conf #启动supervisor服务端,指定配置文件启动
确认服务是否启动
ps -ef | grep supervisor
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律