随笔 - 111  文章 - 0 评论 - 2 阅读 - 16457
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

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

 

 

posted on   阿明明  阅读(88)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示

目录导航

1.简介
2.配置
2.1 安装
2.2 生成配置文件
2.3 进程管理服务命令使用
2.4 启动