安装Supervisor到CentOS(YUM)
Supervisor是一个Linux下进程管理工具。
Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为守护进程,并监控进程状态,异常退出时能自动重启,可以实现程序的自我恢复。
运行环境
系统版本:CentOS Linux release 7.6.1810 (Core)
软件版本:Python
硬件要求:无
安装过程
1、安装Python
Supervisor是Python的一个模块,所以我们需要先安装Python。
[root@localhost ~]# yum -y install git gcc zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel tk-devel libffi-devel
[root@localhost ~]# git clone https://github.com/pyenv/pyenv.git ~/.pyenv
[root@localhost ~]# vim /etc/profile
# pyenv
export PYENV_ROOT="$HOME/.pyenv"
export PATH=$HOME/.pyenv/bin:$PATH
eval "$(pyenv init -)"
[root@localhost ~]# source /etc/profile
[root@localhost ~]# pyenv -v
[root@localhost ~]# pyenv install --list
[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
[root@localhost ~]# pyenv install 3.7.0
[root@localhost ~]# pyenv versions
* system (set by /root/.pyenv/version)
3.7.0
[root@localhost ~]# pyenv global 3.7.0
[root@localhost ~]# python
Python 3.6.9 (default, Apr 9 2020, 07:01:31)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> exit()
2、安装Supervisor
[root@localhost ~]# pip install supervisor
3、创建Supervisor的配置文件
Supervisor提供命令"echo_supervisord_conf"输出默认的模板配置信息,安装完成后我们需要手动创建主配置文件。
[root@localhost ~]# echo_supervisord_conf > /etc/supervisord.conf
4、查看Supervisor版本
[root@localhost ~]# supervisord -v
4.2.0
使用Supervisor监管Nginx
使用Supervisor监管Nginx,当Nginx发生意外故障退出时,自动重启Nginx服务,已实现自我恢复。
1、创建Supervisor主配置文件
创建Supervisor的主配置文件。
如果将Supervisor的主配置文件存放到其他位置的话,则对"Supervisor"的所有操作都需要使用"-c"选项指定主配置文件。
[root@localhost ~]# echo_supervisord_conf >/etc/supervisord.conf
2、创建相关目录
创建用于Supervisor工作目录,用于集中存放程序配置、日志等文件。
[root@localhost ~]# mkdir -p /usr/local/supervisor/conf
[root@localhost ~]# mkdir -p /usr/local/supervisor/logs/childlog
[root@localhost ~]# mkdir -p /usr/local/supervisor/logs/nginxlog
3、配置Supervisord
Supervisord是Supervisor的服务端,提供对程序的监管服务。
[root@localhost ~]# vim /etc/supervisord.conf
[supervisord]
logfile=/usr/local/supervisor/logs/supervisord.log ; 日志文件路径.
logfile_maxbytes=50MB ; 日志最大大小.
logfile_backups=10 ; 日志保留数量.
loglevel=info ; 日志级别.
pidfile=/usr/local/supervisor/supervisord.pid ; 进程PID文件.
nodaemon=false ; 进程非前台运行.
silent=false ; 输出Supervisord信息到日志而不是"stdout".
minfds=1024 ; 打开文件数量限制.
minprocs=200 ; 打开进程数量限制.
umask=022 ; 进程生成文件权限掩码.
user=root ; 运行用户.
identifier=supervisor ; 进程标识符,由RPC接口调用时使用.
directory=/usr/local/supervisor ; 工作主目录.
nocleanup=true ; 缓存日志自动清理.
childlogdir=/usr/local/supervisor/logs/childlog ; 被监管程序所产生的日志输出目录.
;environment=KEY="value" ; 进程内部可以使用的环境变量.
;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。
开启其中一个即可。
[root@localhost ~]# vim /etc/supervisord.conf
;[unix_http_server]
;file=/tmp/supervisor.sock ; UNIX域套接字文件路径.
[inet_http_server]
port=0.0.0.0:9001 ; 监听地址和端口.
username=user ; 用户名.
password=123 ; 密码.
5、配置Supervisorctl
Supervisorctl是Supervisor提供的一条命令行管理客户端,通过连接到HTTP Server,可以在命令行中使用命令"supervisorctl"实现对Supervisor的管理控制。
[root@localhost ~]# vim /etc/supervisord.conf
[supervisorctl]
;serverurl=unix:///tmp/supervisor.sock ; UNIX域套接字文件.
serverurl=http://127.0.0.1:9001 ; HTTP Server连接地址和端口.
username=user ; 连接所使用的用户名.
password=123 ; 连接所使用的密码.
prompt=mysupervisor ; 提示信息.
history_file=/usr/local/supervisor/.sc_history ; 命令历史记录文件.
6、独立程序配置
使用"[include]"部分,可以将被监管的程序相关配置独立到另外一个文件中,以便于管理。
[include]
files=/usr/local/supervisor/conf/*.conf ; 在设置目录下检索其他独立配置文件.
7、添加一个程序
添加一个程序NGINX,NGINX将交由Supervisor监管。
注:由于NGINX程序交由Supervisor托管,则NGINX必须在前台运行。
[root@localhost ~]# vim /usr/local/supervisor/conf/nginx.conf
[program:nginx] ; 程序名.
command=/usr/sbin/nginx -g 'daemon off;' ; 启动程序所使用的命令.
process_name=%(program_name)s_%(process_num)02d ; 程序进程名.
numprocs=1 ; 进程数量.
directory=/usr ; 工作目录.
umask=022 ; 进程生成文件权限掩码.
priority=999 ; 程序启动优先级.
autostart=true ; 当"Supervisord"启动时自动启动该程序.
startsecs=1 ; 完成启动等待时间.
startretries=3 ; 启动程序重试次数.
autorestart=true ; 当程序因故障退出时自动重启程序.
exitcodes=0 ; 程序退出状态码.
stopsignal=TERM ; 程序停止信号.
stopwaitsecs=10 ; 程序停止等待时间,超时则强制退出程序.
stopasgroup=true ; 停止程序进程组.
killasgroup=true ; 强制停止程序进程组.
user=root ; 程序运行用户.
redirect_stderr=true ; 将"stderr"重定向到"stdout".
stdout_logfile=/usr/local/supervisor/logs/nginxlog/nginx_stdout.log ; "stdout"输出到日志文件中.
stdout_logfile_maxbytes=50MB ; stdout日志文件最大大小.
stdout_logfile_backups=10 ; stdout日志文件保留数量.
;stdout_capture_maxbytes=0 ; 关闭stdout日志事件捕获功能.
;stdout_events_enabled=false ; 关闭stdout日志事件功能.
;stdout_syslog=false ; 禁用将stdout输出到syslog.
;stderr_logfile=/usr/local/supervisor/logs/nginxlog/nginx_stderr.log ; "stderr"输出到日志文件中.
;stderr_logfile_maxbytes=50MB ; stderr日志文件最大大小.
;stderr_logfile_backups=10 ; stderr日志文件保留数量.
;stderr_capture_maxbytes=0 ; 关闭stderr日志事件捕获功能.
;stderr_events_enabled=false ; 关闭stderr日志事件功能.
;stderr_syslog=false ; 禁用将stderr输出到syslog.
;environment=A="1",B="2" ; 程序内部使用的环境变量.
;serverurl=AUTO ; HTTP Server连接地址.
8、启动Supervisord服务
[root@localhost ~]# supervisord -c /etc/supervisord.conf
[root@localhost ~]# netstat -lnupt |grep 9001
tcp 0 0 0.0.0.0:9001 0.0.0.0:* LISTEN 16605/python3.7
[root@localhost ~]# tail -f /usr/local/supervisor/logs/supervisord.log
2020-06-11 08:38:52,474 INFO spawned: 'nginx_00' with pid 16606
2020-06-11 08:38:53,526 INFO success: nginx_00 entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
9、查看程序运行状态
[root@localhost ~]# supervisorctl status
nginx:nginx_00 RUNNING pid 16606, uptime 0:04:18
[root@localhost ~]# netstat -lnupt |grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 16606/nginx: master
tcp6 0 0 :::80 :::* LISTEN 16606/nginx: master
10、模拟程序故障
手动杀死Nginx进程,观测Nginx服务运行状态。
我们可以通过日志查看到Nginx自动重启了一次,即被"Supervisor"监管的Nginx服务出现故障时,"Supervisor"会自动重启Nginx服务,实现Nginx的自我恢复。
[root@localhost ~]# kill -15 16606
[root@localhost ~]# tail -f /usr/local/supervisor/logs/supervisord.log
2020-06-11 08:38:52,474 INFO spawned: 'nginx_00' with pid 16606
2020-06-11 08:38:53,526 INFO success: nginx_00 entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2020-06-11 08:46:19,987 INFO exited: nginx_00 (exit status 0; expected)
2020-06-11 08:46:21,047 INFO spawned: 'nginx_00' with pid 16856
2020-06-11 08:46:22,076 INFO success: nginx_00 entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
[root@localhost ~]# netstat -lnupt |grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 16856/nginx: master
tcp6 0 0 :::80 :::* LISTEN 16856/nginx: master
[root@localhost ~]# supervisorctl status
nginx:nginx_00 RUNNING pid 16856, uptime 0:02:54
安装Supervisor到CentOS(YUM)的更多相关文章
- Ejabberd2:安装和操作指南(centos yum 安装ejabberd)
(1)首先安装EPEL Repository ## RHEL/CentOS 6 32-Bit ## # wget http://download.fedoraproject.org/pub/ ...
- centos7 安装 supervisor
一.安装 supervisor yum install python-setuptools easy_install supervisor 如果easy_install不好使就从官方下载: wget ...
- centos上安装supervisor来管理dotnetcore等应用程序
supervisor 介绍: 这是一款用python编写的进程管理工具,可以守护他管理的所有进程,防止异常退出,以及提供一个可视化的web界面来手动管理,打开关闭重启各种应用,界面如下: 关于在cen ...
- centos yum 安装 mongodb 以及php扩展
centos yum 安装 mongodb 以及php扩展 投稿:hebedich 字体:[增加 减小] 类型:转载 MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用 ...
- 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分类: 操作系统 ...
- redhat centos yum源的安装
redhat centos yum源的安装 1.除旧 #cd /etc/yum.repos.d #mv rhel-debuginfo.repo rhel-debuginfo.repo.bak 此处将其 ...
- 【转】CentOS yum安装和卸载软件的使用方法
在CentOS yum安装和卸载软件的使用方法安装方法安装一个软件时. CentOS yum -y install httpd安装多个相类似的软件时 CentOS yum -y install ...
- CentOS6.5系统挂载NTFS分区的移动硬盘 centos安装repoforge源(yum)
CentOS6.5系统挂载NTFS分区的移动硬盘 作为IT的工作者,避免不了使用Linux系统,我现在使用的系统是CentOS6.5 X86_64位版本,但是插入NTFS移动硬盘没有办法识别.通过下面 ...
- centos的软件安装方法rpm和yum
centos的软件安装大致可以分为两种类型: [centos]rpm文件安装,使用rpm指令 类似[ubuntu]deb文件安装,使用dpkg指令 [centos]yum安装 类似[ubuntu ...
随机推荐
- 用纯CSS实现优雅的tab页
说明 又是一个练手的小玩意儿,本身没什么技术含量,就是几个不常用的CSS3特性的结合而已. 要点 Label标签的for属性 单选框的:checked伪类 CSS的加号[+]选择器 效果图 原理 通常 ...
- python大佬养成计划----基于flask_sqlalchemy的网页显示数据库信息
网页显示数据库信息 使用我们刚学习的flask_sqlalchemy,在网页中显示数据库表中的数据.在开始运行程序前,确保数据库中执行过创建表和创建用户的操作,详见链接描述. # 模板文件templa ...
- 从ES6重新认识JavaScript设计模式(三): 建造者模式
1 什么是建造者模式? 建造者模式(Builder)是将一个复杂对象的构建层与其表示层相互分离,同样的构建过程可采用不同的表示. 建造者模式的特点是分步构建一个复杂的对象,可以用不同组合或顺序建造出不 ...
- 前端react+redux+koa写的博客推荐
React-Node搭建的博客 曾经用的php+mysql+js写的博客,现在看来已经很low了,所以用目前最火的react+koa框架重构一下.先上地址吧:目前线上版本http://www.liuw ...
- 【weex开发】weex官方源码
公司目前使用版本:weex_sdk:0.10.0 介绍地址:https://bintray.com/alibabaweex/maven/weex_sdk/0.18.0 weex最新版本:weex_sd ...
- C语言 之 多线程编程
一.基础知识 计算机的核心是CPU,承担了所有的计算任务. 操作系统是计算机的管理者,负责任务的调度.资源的分配和管理,统领整个计算机硬件. 应用程序则是具有某种功能的程序,程序是运行于操作系统之上的 ...
- Python-术语对照表
>>> 交互式终端中默认的 Python 提示符.往往会显示于能以交互方式在解释器里执行的样例代码之前. ... 具有以下含义: 交互式终端中输入特殊代码行时默认的 Python 提 ...
- python版本共存与语法的注释
python的多种版本共存 首先还是先下载python解释器除最高版本的另外两个版本 个人推荐的是 3.6.8和2.7.14 首先我电脑是win7系统 在计算机属性右键点开高级设置点击环境变量 将下载 ...
- Typora基本使用语法(超好用的代码编辑工具)
Typora代码编辑软件,一款适合新手小白的做笔记工具,操作简单,大家可以去试试......
- 学习打卡——Mybatis—Plus
今天看完了Mybatis-Plus的视频,在某些方面来看MP确实简化了很多操作,比如自动生成代码等等.学习过程的代码实例也到同步到了gitee和github