文档章节

使用Supervisor管理Redis进程

秋风醉了
 秋风醉了
发布于 2016/04/14 10:20
字数 1300
阅读 433
收藏 0
点赞 1
评论 0

使用Supervisor管理Redis进程

环境:MAC OS

Supervisor (http://supervisord.org) 是一个用 Python 写的进程管理工具,可以很方便的用来启动、重启、关闭进程(不仅仅是 Python 进程)。除了对单个进程的控制,还可以同时启动、关闭多个进程,比如很不幸的服务器出问题导致所有应用程序都被杀死,此时可以用 supervisor 同时启动所有应用程序而不是一个一个地敲命令启动。

安装过程,

安装pip:

➜  ~ sudo easy_install pip

然后安装supervisor

➜  ~ sudo pip install supervisor

安装完成。


supervisord配置

Supervisor 相当强大,提供了很丰富的功能,不过我们可能只需要用到其中一小部分。安装完成之后,可以编写配置文件,来满足自己的需求。为了方便,我们把配置分成两部分:supervisord(supervisor 是一个 C/S 模型的程序,这是 server 端,对应的有 client 端:supervisorctl)和应用程序(即我们要管理的程序)。

首先来看 supervisord 的配置文件。安装完 supervisor 之后,可以运行echo_supervisord_conf 命令输出默认的配置项,也可以重定向到一个配置文件里:

➜  ~ type echo_supervisord_conf
echo_supervisord_conf is /usr/local/bin/echo_supervisord_conf
➜  ~ echo_supervisord_conf > /Users/xinxingegeya/IDE/supervisor/etc/supervisord.conf

生成的该配置文件为默认配置选项,具体详细介绍请参照:http://supervisord.org/configuration.html


启动supervisord

可以使用-c参数指定配置文件,如果没有指定的话会从以下位置寻找配置文件,

  1. $CWD/supervisord.conf

  2. $CWD/etc/supervisord.conf

  3. /etc/supervisord.conf

  4. ../etc/supervisord.conf (Relative to the executable)

  5. ../supervisord.conf (Relative to the executable)

注意:CWD是current work directory的缩写。

如下启动supervisord,

➜  supervisor supervisord -c ./etc/supervisord.conf
➜  supervisor ps -ef | grep supervisord
  501  1441     1   0 11:45下午 ??         0:00.01 /usr/bin/python /usr/local/bin/supervisord -c ./etc/supervisord.conf
  501  1455   822   0 11:45下午 ttys000    0:00.00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn supervisord
➜  supervisor

可以看到启动成功。那么如何来管理进程呢?


进程管理的配置文件

使用supervisor管理进程,首先要有一个进程的配置文件,以redis的进程为例,使用supervisor管理redis的进程。

redis的安装过程略,具体可以参考http://my.oschina.net/xinxingegeya/blog/389155,下面来配置一个redis进程的配置文件。

[program:redis_7000]
directory = /Users/xinxingegeya/IDE/redis/redis_7000 ; 程序的启动目录
command = /usr/local/bin/redis-server /Users/xinxingegeya/IDE/redis/redis_7000/7000.conf  ; 启动命令,可以看出与手动在命令行启动的命令是一样的
autostart = true     ; 在 supervisord 启动的时候也自动启动
autorestart = true   ; 程序异常退出后自动重启
startsecs = 5        ; 启动 5 秒后没有异常退出,就当作已经正常启动了
startretries = 3     ; 启动失败自动重试次数,默认是 3
user = xinxingegeya          ; 用哪个用户启动
redirect_stderr = true  ; 把 stderr 重定向到 stdout,默认 false
stdout_logfile_maxbytes = 20MB  ; stdout 日志文件大小,默认 50MB
stdout_logfile_backups = 20     ; stdout 日志文件备份数
; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile = /Users/xinxingegeya/IDE/redis/log/redis_7000_stdout.log

该program的名字表示这是一个在端口7000上启动的redis进程。注意redis进程要以非daemon方式启动。

需要在supervisord.conf配置文件中包含该进程配置文件。打开supervisord.conf配置文件修改include选项为:

[include]
files = ../*.supervisor

表示该配置文件所在目录的父级目录中的以supervisor结尾的配置都要包含进来。

刚才配置的redis_7000进程的配置文件的路径为,

/Users/xinxingegeya/IDE/redis/redis_7000/redis_7000.supervisor

所以要在supervisord.conf的父级目录中创建一个以supervisor结尾的软链接。如下,

➜  supervisor ln ~/IDE/redis/redis_7000/redis_7000.supervisor redis_7000.supervisor
➜  supervisor ll
total 88
drwxr-xr-x  3 xinxingegeya  staff   102B  4 14 00:09 etc
-rw-r--r--@ 2 xinxingegeya  staff    41K  3 23 22:21 redis_7000.supervisor
➜  supervisor

刚才更改了supervisor的配置,重新启动一下supervisord


使用supervisorctl

Supervisorctl是supervisord的一个命令行客户端工具,启动时需要指定与 supervisord 使用同一份配置文件,否则与 supervisord 一样按照顺序查找配置文件。

启动supervisor后,运行supervisorctl命令,如下,

➜  supervisor supervisorctl
redis_7000                       RUNNING   pid 3479, uptime 0:00:09
supervisor>

可以看到一个被supervisor管理的进程,名字是redis_7000,运行状态为RUNNING。有一些命令可以用来管理进程,比如启动(start),停用(stop),重启(restart),重新启动supervisord(reload),启动新配置或有改动的进程(update),查看被管理的进程的状态(status)等。如下,

➜  supervisor supervisorctl
redis_7000                       RUNNING   pid 3479, uptime 0:00:09
supervisor> status
redis_7000                       RUNNING   pid 3479, uptime 0:06:10
supervisor> stop redis_7000
redis_7000: stopped
supervisor> status
redis_7000                       STOPPED   Apr 14 10:13 AM
supervisor> start redis_7000
redis_7000: started
supervisor> restart redis_7000
redis_7000: stopped
redis_7000: started
supervisor> stop redis_7000
redis_7000: stopped
supervisor> reload
Really restart the remote supervisord process y/N? y
Restarted supervisord
supervisor> status
redis_7000                       RUNNING   pid 3506, uptime 0:00:07
supervisor> update
supervisor> stop redis_7000
redis_7000: stopped
supervisor> update
supervisor> status
redis_7000                       STOPPED   Apr 14 10:15 AM
supervisor> reload
Really restart the remote supervisord process y/N? y
Restarted supervisord
supervisor> status
redis_7000                       STARTING
supervisor> status
redis_7000                       RUNNING   pid 3511, uptime 0:00:08
supervisor>

=========END=========

© 著作权归作者所有

共有 人打赏支持
秋风醉了
粉丝 223
博文 581
码字总数 411013
作品 0
东城
程序员
[2]supervisor的使用管理:实现对异常中断的子进程的自动重启(以redis为例)

1:下载 wget http://download.redis.io/releases/redis-3.2.8.tar.gz1 下载指定版本,可以登录https://redis.io/download查看 2:安装 tar zxvf redis-3.2.8.tar.gzcd redis-3.2.8makesudo ......

Mr_sheng ⋅ 今天 ⋅ 0

Supervisor 进程管理工具

Supervisor 进程管理工具时刻检测进程存活状态;可用来启动、重启、关闭进程; Supervisord(supervisor是一个C/S模型的程序,这是server端,对应的有client端:supervisorctl)和应用程序(...

蓝宫卫 ⋅ 2017/05/11 ⋅ 0

阅读准备-构建redis容器

Supervisor Centos Supervisor安装 要求 python环境 因为是一个 Python 程序 [root@localhost wang]# python -VPython 2.7.5 验证: 成功安装后可以登陆python 查看是否能成功加载 Supervis...

一叶舟troy ⋅ 2015/12/13 ⋅ 0

centos7安装redis之使用supvisor管理redis

有关supervisor的使用请参照https://my.oschina.net/weidedong/blog/747428添加redis.conf至/etc/supervisord.d/,内容如下 执行命令 访问http://192.168.91.128:9001/...

weidedong ⋅ 2016/10/02 ⋅ 0

Linux 进程管理与监控(supervisor and monit)

一、Supervisor 1、安装 宿主机环境:( Centos 6.5 ) pip2.7 install supervisor 2、创建配置文件 通过 echosupervisordconf 命令来创建配置文件: echosupervisordconf >/etc/supervisord.co......

qw87112 ⋅ 2016/07/19 ⋅ 0

异步命令执行队列--Coyotes

Coyotes 的诞生起源于在使用 Laravel 的定时任务时,由于 PHP 本身的限制(不安装线程相关扩展),无法实现并发的任务执行,如果任务执行时间过长,就会影响到其它定时任务的执行。不同于其它...

mylxsw ⋅ 2017/04/18 ⋅ 1

Python Web 部署: 使用 flask + gunicorn + supervisor + nginx

flask   python 的服务器框架 gunicorn   webservice,WSGI 的容器 supervisor   进程管理工具 nginx   一个高性能的 web 服务器 创建项目 先为应用创建一个路径 构建 Python 的虚拟环...

SSBun ⋅ 2017/06/01 ⋅ 0

【翻译】在开公司之前, 我希望知道的关于Django的11件事

两年前, 我开了家公司SocialQ。在开这家公司之前, 我几乎对开发一无所知。 我从头学习了HTTP, javascript, AJAX, 以及 Django 的MVC。 这是一个疯狂的旅程, 我们的知识栈 从成熟的技术...

wilelm ⋅ 2014/05/29 ⋅ 1

Logstash语法常用案例解析(一)

摘要 简述logstash的常用插件,以及简单的使用案例 一:基础运行 建议使用supervisor来管理ELK中的各个组件,方便同一管理 安装 https://www.aolens.cn/?p=809 有讲解 提供一个常用的配置: ...

aolens ⋅ 2017/05/25 ⋅ 0

Supervisor 管理进程,Cloud Insight 监控进程,完美!

[Supervisor][1] 是由 [Python][2] 语言编写、基于 linux 操作系统的一款服务器管理工具,用于监控服务器的运行,发现问题能立即自动预警及自动重启等。 [Cloud Insight][3] 是一款次世代监控...

OneAPM蓝海讯通 ⋅ 2016/05/19 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

vue使用mockjs

在使用vue开发的时候,一直疑惑与mockjs怎么用,开了mockjs的开发文档,还是一脸蒙蔽,无从下手!mockjs在前后端分离开发上进行模拟数据,是不可避掉的一环。在网上看了一些博文还有查阅了其...

JamesView ⋅ 28分钟前 ⋅ 0

解决问题的思路

1.相对来说,程序逻辑解决问题的思路应该更加趋向于通过逻辑结构来解决问题,而不是通过更小的类级别和方法级别的改进 2.类级别和方法级别的改进需要的技术能力更高一点

th778899 ⋅ 34分钟前 ⋅ 0

HTTP请求状态及jQuery AJAX请求异常处理

上一周调优一个项目的Js部分,其中一个严重的问题就是在页面初始化数据时,没有对异常进行处理, 导致Loading一直在等待中,无提示无处理。在用户体验上很不好,即使网络条件无法保证,在出错...

临江仙卜算子 ⋅ 34分钟前 ⋅ 0

error code 1874. innodb is in read only mode--报错解决

参考网页 https://zhidao.baidu.com/question/746894876932022292.html https://blog.csdn.net/shushugood/article/details/80226767 问题背景 创建了一个数据库然后想删除,因为自己本机性能......

karma123 ⋅ 36分钟前 ⋅ 0

JVM系列:jinfo命令详解

jinfo全称Java Configuration Info,主要作用是实时查看和调整JVM配置参数。 一.查看JVM参数 用法:jinfo -flag <name> PID 示例: # jinfo -flag MaxMetaspaceSize 11180 # -XX:MaxMetaspac......

Jacktanger ⋅ 40分钟前 ⋅ 0

exportfs命令、NFS客户端问题、FTP介绍、使用vsftpd搭建ftp

1. exportfs命令 一般情况下重启服务器上nfs服务时,需把客户端上的挂载先卸载掉,以免进程后面杀不掉。当客户端服务器很多时,操作起来就比较麻烦。此时可以使用exportfs命令重新加载下。 ...

laoba ⋅ 49分钟前 ⋅ 0

基于Python的信用评分卡模型分析

信用风险计量体系包括主体评级模型和债项评级两部分。主体评级和债项评级均有一系列评级模型组成,其中主体评级模型可用“四张卡”来表示,分别是A卡、B卡、C卡和F卡;债项评级模型通常按照主...

火力全開 ⋅ 51分钟前 ⋅ 0

执行make命令时报错g++: Command not found

执行make命令时报错g++: Command not found 2016年10月24日 12:31:29 阅读数:4366 朋友安装node时遇到的问题 报错截图: 其实很简单只需要安装一下 yum -y install gcc automake autoconf l...

rootliu ⋅ 51分钟前 ⋅ 0

Loongnix(龙芯)系统,优盘安装指南

U盘安装分为两种方式:"usb disk" 及 "usb cd"。其中usb cd是将usb disk做为usb光驱使用。 usb disk安装步骤: 需要准备一个大小超过3.5G的U盘,格式化ext3格式 下载安装光盘镜像xxx.iso,将...

gugudu ⋅ 54分钟前 ⋅ 0

HTML5中meta属性的使用详解

meta属性在HTML中占据了很重要的位置。如:针对搜索引擎的SEO,文档的字符编码,设置刷新缓存等。虽然一些网页可能没有使用meta,但是作为正规军,我们还是有必要了解一些meta的属性,并且能...

guorongjin ⋅ 58分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部