Supervisor是一个Linux下进程管理工具。
Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为守护进程,并监控进程状态,异常退出时能自动重启,可以实现程序的自我恢复。

运行环境

系统版本:CentOS Linux release 7.6.1810 (Core)

软件版本:Python

硬件要求:无

安装过程

1、安装Python

Supervisor是Python的一个模块,所以我们需要先安装Python。

  1. [root@localhost ~]# yum -y install git gcc zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel tk-devel libffi-devel
  2. [root@localhost ~]# git clone https://github.com/pyenv/pyenv.git ~/.pyenv
  3. [root@localhost ~]# vim /etc/profile
  4. # pyenv
  5. export PYENV_ROOT="$HOME/.pyenv"
  6. export PATH=$HOME/.pyenv/bin:$PATH
  7. eval "$(pyenv init -)"
  8. [root@localhost ~]# source /etc/profile
  9. [root@localhost ~]# pyenv -v
  10. [root@localhost ~]# pyenv install --list
  11. [root@localhost ~]# for i in $(grep -r 'www.python.org' ~/.pyenv/*|awk -F ':' '{print $1}'|grep '^/');do sed -i 's#https://www.python.org/ftp/#https://npm.taobao.org/mirrors/#g' $i;done
  12. [root@localhost ~]# pyenv install 3.7.0
  13. [root@localhost ~]# pyenv versions
  14. * system (set by /root/.pyenv/version)
  15. 3.7.0
  16. [root@localhost ~]# pyenv global 3.7.0
  17. [root@localhost ~]# python
  18. Python 3.6.9 (default, Apr 9 2020, 07:01:31)
  19. [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linux
  20. Type "help", "copyright", "credits" or "license" for more information.
  21. >>> exit()

2、安装Supervisor

  1. [root@localhost ~]# pip install supervisor

3、创建Supervisor的配置文件

Supervisor提供命令"echo_supervisord_conf"输出默认的模板配置信息,安装完成后我们需要手动创建主配置文件。

  1. [root@localhost ~]# echo_supervisord_conf > /etc/supervisord.conf

4、查看Supervisor版本

  1. [root@localhost ~]# supervisord -v
  2. 4.2.0

使用Supervisor监管Nginx

使用Supervisor监管Nginx,当Nginx发生意外故障退出时,自动重启Nginx服务,已实现自我恢复。

1、创建Supervisor主配置文件

创建Supervisor的主配置文件。

如果将Supervisor的主配置文件存放到其他位置的话,则对"Supervisor"的所有操作都需要使用"-c"选项指定主配置文件。

  1. [root@localhost ~]# echo_supervisord_conf >/etc/supervisord.conf

2、创建相关目录

创建用于Supervisor工作目录,用于集中存放程序配置、日志等文件。

  1. [root@localhost ~]# mkdir -p /usr/local/supervisor/conf
  2. [root@localhost ~]# mkdir -p /usr/local/supervisor/logs/childlog
  3. [root@localhost ~]# mkdir -p /usr/local/supervisor/logs/nginxlog

3、配置Supervisord

Supervisord是Supervisor的服务端,提供对程序的监管服务。

  1. [root@localhost ~]# vim /etc/supervisord.conf
  2. [supervisord]
  3. logfile=/usr/local/supervisor/logs/supervisord.log ; 日志文件路径.
  4. logfile_maxbytes=50MB ; 日志最大大小.
  5. logfile_backups=10 ; 日志保留数量.
  6. loglevel=info ; 日志级别.
  7. pidfile=/usr/local/supervisor/supervisord.pid ; 进程PID文件.
  8. nodaemon=false ; 进程非前台运行.
  9. silent=false ; 输出Supervisord信息到日志而不是"stdout".
  10. minfds=1024 ; 打开文件数量限制.
  11. minprocs=200 ; 打开进程数量限制.
  12. umask=022 ; 进程生成文件权限掩码.
  13. user=root ; 运行用户.
  14. identifier=supervisor ; 进程标识符,由RPC接口调用时使用.
  15. directory=/usr/local/supervisor ; 工作主目录.
  16. nocleanup=true ; 缓存日志自动清理.
  17. childlogdir=/usr/local/supervisor/logs/childlog ; 被监管程序所产生的日志输出目录.
  18. ;environment=KEY="value" ; 进程内部可以使用的环境变量.
  19. ;strip_ansi=false ; 禁止在日志中添加ANSI转义码"\r\n",多行日志.

4、配置HTTP Server

HTTP Server是Supervisor的管理端,提供对监管服务以及被监管程序的控制。管理员通过浏览器或者"supervisorctl"命令完成对Supervisor的管理控制。

启用HTTP Server的方式有两种:

"unix_http_server",开放一个UNIX域套接字,管理员可以通过这个套接字管理控制Supervisor。

"inet_http_server",开放一个TCP套接字,管理员可以通过IP地址:端口的方式管理控制Supervisor。

开启其中一个即可。

  1. [root@localhost ~]# vim /etc/supervisord.conf
  2. ;[unix_http_server]
  3. ;file=/tmp/supervisor.sock ; UNIX域套接字文件路径.
  4. [inet_http_server]
  5. port=0.0.0.0:9001 ; 监听地址和端口.
  6. username=user ; 用户名.
  7. password=123 ; 密码.

5、配置Supervisorctl

Supervisorctl是Supervisor提供的一条命令行管理客户端,通过连接到HTTP Server,可以在命令行中使用命令"supervisorctl"实现对Supervisor的管理控制。

  1. [root@localhost ~]# vim /etc/supervisord.conf
  2. [supervisorctl]
  3. ;serverurl=unix:///tmp/supervisor.sock ; UNIX域套接字文件.
  4. serverurl=http://127.0.0.1:9001 ; HTTP Server连接地址和端口.
  5. username=user ; 连接所使用的用户名.
  6. password=123 ; 连接所使用的密码.
  7. prompt=mysupervisor ; 提示信息.
  8. history_file=/usr/local/supervisor/.sc_history ; 命令历史记录文件.

6、独立程序配置

使用"[include]"部分,可以将被监管的程序相关配置独立到另外一个文件中,以便于管理。

  1. [include]
  2. files=/usr/local/supervisor/conf/*.conf ; 在设置目录下检索其他独立配置文件.

7、添加一个程序

添加一个程序NGINX,NGINX将交由Supervisor监管。

注:由于NGINX程序交由Supervisor托管,则NGINX必须在前台运行。

  1. [root@localhost ~]# vim /usr/local/supervisor/conf/nginx.conf
  2. [program:nginx] ; 程序名.
  3. command=/usr/sbin/nginx -g 'daemon off;' ; 启动程序所使用的命令.
  4. process_name=%(program_name)s_%(process_num)02d ; 程序进程名.
  5. numprocs=1 ; 进程数量.
  6. directory=/usr ; 工作目录.
  7. umask=022 ; 进程生成文件权限掩码.
  8. priority=999 ; 程序启动优先级.
  9. autostart=true ; "Supervisord"启动时自动启动该程序.
  10. startsecs=1 ; 完成启动等待时间.
  11. startretries=3 ; 启动程序重试次数.
  12. autorestart=true ; 当程序因故障退出时自动重启程序.
  13. exitcodes=0 ; 程序退出状态码.
  14. stopsignal=TERM ; 程序停止信号.
  15. stopwaitsecs=10 ; 程序停止等待时间,超时则强制退出程序.
  16. stopasgroup=true ; 停止程序进程组.
  17. killasgroup=true ; 强制停止程序进程组.
  18. user=root ; 程序运行用户.
  19. redirect_stderr=true ; "stderr"重定向到"stdout".
  20. stdout_logfile=/usr/local/supervisor/logs/nginxlog/nginx_stdout.log ; "stdout"输出到日志文件中.
  21. stdout_logfile_maxbytes=50MB ; stdout日志文件最大大小.
  22. stdout_logfile_backups=10 ; stdout日志文件保留数量.
  23. ;stdout_capture_maxbytes=0 ; 关闭stdout日志事件捕获功能.
  24. ;stdout_events_enabled=false ; 关闭stdout日志事件功能.
  25. ;stdout_syslog=false ; 禁用将stdout输出到syslog.
  26. ;stderr_logfile=/usr/local/supervisor/logs/nginxlog/nginx_stderr.log ; "stderr"输出到日志文件中.
  27. ;stderr_logfile_maxbytes=50MB ; stderr日志文件最大大小.
  28. ;stderr_logfile_backups=10 ; stderr日志文件保留数量.
  29. ;stderr_capture_maxbytes=0 ; 关闭stderr日志事件捕获功能.
  30. ;stderr_events_enabled=false ; 关闭stderr日志事件功能.
  31. ;stderr_syslog=false ; 禁用将stderr输出到syslog.
  32. ;environment=A="1",B="2" ; 程序内部使用的环境变量.
  33. ;serverurl=AUTO ; HTTP Server连接地址.

8、启动Supervisord服务

  1. [root@localhost ~]# supervisord -c /etc/supervisord.conf
  2. [root@localhost ~]# netstat -lnupt |grep 9001
  3. tcp 0 0 0.0.0.0:9001 0.0.0.0:* LISTEN 16605/python3.7
  4. [root@localhost ~]# tail -f /usr/local/supervisor/logs/supervisord.log
  5. 2020-06-11 08:38:52,474 INFO spawned: 'nginx_00' with pid 16606
  6. 2020-06-11 08:38:53,526 INFO success: nginx_00 entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)

9、查看程序运行状态

  1. [root@localhost ~]# supervisorctl status
  2. nginx:nginx_00 RUNNING pid 16606, uptime 0:04:18
  3. [root@localhost ~]# netstat -lnupt |grep nginx
  4. tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 16606/nginx: master
  5. tcp6 0 0 :::80 :::* LISTEN 16606/nginx: master

10、模拟程序故障

手动杀死Nginx进程,观测Nginx服务运行状态。

我们可以通过日志查看到Nginx自动重启了一次,即被"Supervisor"监管的Nginx服务出现故障时,"Supervisor"会自动重启Nginx服务,实现Nginx的自我恢复。

  1. [root@localhost ~]# kill -15 16606
  2. [root@localhost ~]# tail -f /usr/local/supervisor/logs/supervisord.log
  3. 2020-06-11 08:38:52,474 INFO spawned: 'nginx_00' with pid 16606
  4. 2020-06-11 08:38:53,526 INFO success: nginx_00 entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
  5. 2020-06-11 08:46:19,987 INFO exited: nginx_00 (exit status 0; expected)
  6. 2020-06-11 08:46:21,047 INFO spawned: 'nginx_00' with pid 16856
  7. 2020-06-11 08:46:22,076 INFO success: nginx_00 entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
  8. [root@localhost ~]# netstat -lnupt |grep nginx
  9. tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 16856/nginx: master
  10. tcp6 0 0 :::80 :::* LISTEN 16856/nginx: master
  11. [root@localhost ~]# supervisorctl status
  12. nginx:nginx_00 RUNNING pid 16856, uptime 0:02:54

安装Supervisor到CentOS(YUM)的更多相关文章

  1. Ejabberd2:安装和操作指南(centos yum 安装ejabberd)

    (1)首先安装EPEL Repository     ## RHEL/CentOS 6 32-Bit ##  # wget http://download.fedoraproject.org/pub/ ...

  2. centos7 安装 supervisor

    一.安装 supervisor yum install python-setuptools easy_install supervisor 如果easy_install不好使就从官方下载: wget ...

  3. centos上安装supervisor来管理dotnetcore等应用程序

    supervisor 介绍: 这是一款用python编写的进程管理工具,可以守护他管理的所有进程,防止异常退出,以及提供一个可视化的web界面来手动管理,打开关闭重启各种应用,界面如下: 关于在cen ...

  4. centos yum 安装 mongodb 以及php扩展

    centos yum 安装 mongodb 以及php扩展 投稿:hebedich 字体:[增加 减小] 类型:转载 MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用 ...

  5. yum-config-manager YUM安装遭遇: [Errno 256] No more mirrors to try CentOS yum之$releasever和$basearch

    YUM安装遭遇: [Errno 256] No more mirrors to try createrepo 有问题. CentOS yum之$releasever和$basearch分类: 操作系统 ...

  6. redhat centos yum源的安装

    redhat centos yum源的安装 1.除旧 #cd /etc/yum.repos.d #mv rhel-debuginfo.repo rhel-debuginfo.repo.bak 此处将其 ...

  7. 【转】CentOS yum安装和卸载软件的使用方法

    在CentOS yum安装和卸载软件的使用方法安装方法安装一个软件时.   CentOS yum -y install httpd安装多个相类似的软件时   CentOS yum -y install ...

  8. CentOS6.5系统挂载NTFS分区的移动硬盘 centos安装repoforge源(yum)

    CentOS6.5系统挂载NTFS分区的移动硬盘 作为IT的工作者,避免不了使用Linux系统,我现在使用的系统是CentOS6.5 X86_64位版本,但是插入NTFS移动硬盘没有办法识别.通过下面 ...

  9. centos的软件安装方法rpm和yum

    centos的软件安装大致可以分为两种类型: [centos]rpm文件安装,使用rpm指令  类似[ubuntu]deb文件安装,使用dpkg指令 [centos]yum安装   类似[ubuntu ...

随机推荐

  1. 接口combine

    需求描述 进行复杂项目开发时,服务端(数据接口实现端)会把接口拆分的比较细粒度,以方便在更多地方复用.而拆分后的接口在前端进行组合请求时,通常会出现一个区块要请求5.6个接口甚至更多接口请求才能拿到想 ...

  2. APICloud重磅支持Atom编辑器,并建立开发工具核心库

    APICloud技术再次升级,不仅支持Atom编辑器开发工具,并推出核心开发工具库,使开发者进行App开发更便捷高效. APICloud支持Atom编辑器开发工具 APICloud始终坚持多开发工具支 ...

  3. Android Studio登陆界面+Button不变色问题

    今日所学内容: 1.初始相对布局 2.AS登录界面 3.一个可以下载小图标的阿里的网站iconfont-阿里巴巴矢量图标库 用GitHub账号绑定就可以免费下载 4.取颜色工具ColorCop 遇到的 ...

  4. openlayers离线瓦片地图开发

    近期业务繁忙...待更新

  5. Java报错:Injection of resource dependencies failed

    在学习springMVC+Mabatis的时候,添加注解@Resource报错 Injection of resource dependencies failed de完bug后发现有几个点注意一下, ...

  6. kali添加开机自启[亲测有效]

    kali添加开机自启 采用systemd的方法,kali默认是没有rc.local的,需要自己创建.本方法也适用于ubuntu 18.04 64bit 改写rc-local.service 文件 先从 ...

  7. DirectX11 With Windows SDK--38 级联阴影映射(CSM)

    前言 在31章我们曾经实现过阴影映射,但是受到阴影贴图精度的限制,只能在场景中相当有限的范围内投射阴影.本章我们将以微软提供的例子和博客作为切入点,学习如何解决阴影中出现的Atrifacts: 边缘闪 ...

  8. 前端CSS浮动、定位、溢出、z-index、透明度

    一.浮动float 在 CSS 中,任何元素都可以浮动. 浮动元素会生成一个块级框,而不论它本身是何种元素. 关于浮动的两个特点: 浮动的框可以向左或向右移动,直到它的外边缘碰到包含框或另一个浮动框的 ...

  9. 论文翻译:2021_Towards model compression for deep learning based speech enhancement

    论文地址:面向基于深度学习的语音增强模型压缩 论文代码:没开源,鼓励大家去向作者要呀,作者是中国人,在语音增强领域 深耕多年 引用格式:Tan K, Wang D L. Towards model c ...

  10. 安全开发运维必备,如何进行Nginx代理Web服务器性能优化与安全加固配置,看这篇指南就够了

    本章目录 1.引言 1.1 目的 1.2 目标范围 1.3 读者对象 2.参考说明 2.1 帮助参考 2.2 参数说明 3.3 模块说明 3.服务优化 3.1 系统内核 3.2 编译优化 3.3 性能 ...