Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。它是通过fork/exec的方式把这些被管理的进程当作supervisor的子进程来启动,这样只要在supervisor的配置文件中,把要管理的进程的可执行文件的路径写进去即可。也实现当子进程挂掉的时候,父进程可以准确获取子进程挂掉的信息的,可以选择是否自己启动和报警。supervisor还提供了一个功能,可以为supervisord或者每个子进程,设置一个非root的user,这个user就可以管理它对应的进程。

说明:

1,安装

[root@Poppy ~]# yum install supervisor

2,配置文件

/etc/supervisord.conf

supervisor的配置文件默认是不全的,不过在大部分默认的情况下,上面说的基本功能已经满足。

然后,开始给自己需要的脚本程序编写一个子进程配置文件,让supervisor来管理它,放在/etc/supervisor/conf.d/目录下,以.conf作为扩展名(每个进程的配置文件都可以单独分拆也可以把相关的脚本放一起)。如任意定义一个和脚本相关的项目名称的选项组(/etc/supervisor/conf.d/test.conf):

[include]
files = /etc/supervisord.d/*.conf

#项目名
[program:blog]
#脚本目录
directory=/opt/bin
#脚本执行命令
command=/usr/bin/python /opt/bin/test.py
#supervisor启动的时候是否随着同时启动,默认True
autostart=true
#设置子进程挂掉后自动重启的情况,有三个选项,false,unexpected和true。如果为false的时候,无论什么情况下,都不会被重新启动,如果为unexpected,只有当进程的退出码不在下面的exitcodes里面定义的
autorestart=True
#这个选项是子进程启动多少秒之后,此时状态如果是running,则我们认为启动成功了。默认值为1,非必须设置
#startsecs=1
#日志输出,需要提前创建好,否则会报错
#stderr_logfile=/tmp/blog_stderr.log
stdout_logfile=/tmp/blog_stdout.log
#脚本运行的用户身份
user=root
#把 stderr 重定向到 stdout,默认 false,当然你也可以分开日志输出
redirect_stderr = true
#stdout 日志文件大小,默认 50MB
stdout_logfile_maxbytes = 20M
#stdout 日志文件备份数,默认10
stdout_logfile_backups = 20

附上配置文件

;[program:theprogramname]      ;这个就是咱们要管理的子进程了,":"后面的是名字,最好别乱写和实际进程有点关联最好。这样的program我们可以设置一个或多个,一个program就是要被管理的一个进程
;command=/bin/cat              ; 这个就是我们的要启动进程的命令路径了,可以带参数例子:/home/test.py -a 'hehe'有一点需要注意的是,我们的command只能是那种在终端运行的进程,不能是守护进程。这个想想也知道了,比如说command=service httpd start。httpd这个进程被linux的service管理了,我们的supervisor再去启动这个命令这已经不是严格意义的子进程了。这个是个必须设置的项
;process_name=%(program_name)s ; 这个是进程名,如果我们下面的numprocs参数为1的话,就不用管这个参数了,它默认值%(program_name)s也就是上面的那个program冒号后面的名字,但是如果numprocs为多个的话,那就不能这么干了。想想也知道,不可能每个进程都用同一个进程名吧。;numprocs=1                    ; 启动进程的数目。当不为1时,就是进程池的概念,注意process_name的设置默认为1    。。非必须设置
;directory=/tmp                ; 进程运行前,会前切换到这个目录默认不设置。。。非必须设置
;umask=022                     ; 进程掩码,默认none,非必须
;priority=999                  ; 子进程启动关闭优先级,优先级低的,最先启动,关闭的时候最后关闭默认值为999 。。非必须设置
;autostart=true                ; 如果是true的话,子进程将在supervisord启动后被自动启动默认就是true   。。非必须设置
;autorestart=unexpected        ; 这个是设置子进程挂掉后自动重启的情况,有三个选项,false,unexpected和true。如果为false的时候,无论什么情况下,都不会被重新启动,如果为unexpected,只有当进程的退出码不在下面的exitcodes里面定义的退 出码的时候,才会被自动重启。当为true的时候,只要子进程挂掉,将会被无条件的重启
;startsecs=1                   ; 这个选项是子进程启动多少秒之后,此时状态如果是running,则我们认为启动成功了默认值为1 。。非必须设置
;startretries=3                ; 当进程启动失败后,最大尝试启动的次数。。当超过3次后,supervisor将把此进程的状态置为FAIL默认值为3 。。非必须设置
;exitcodes=0,2                 ; 注意和上面的的autorestart=unexpected对应。。exitcodes里面的定义的退出码是expected的。
;stopsignal=QUIT               ; 进程停止信号,可以为TERM, HUP, INT, QUIT, KILL, USR1, or USR2等信号默认为TERM 。。当用设定的信号去干掉进程,退出码会被认为是expected非必须设置
;stopwaitsecs=10               ; 这个是当我们向子进程发送stopsignal信号后,到系统返回信息给supervisord,所等待的最大时间。 超过这个时间,supervisord会向该子进程发送一个强制kill的信号。默认为10秒。。非必须设置
;stopasgroup=false             ; 这个东西主要用于,supervisord管理的子进程,这个子进程本身还有子进程。那么我们如果仅仅干掉supervisord的子进程的话,子进程的子进程有可能会变成孤儿进程。所以咱们可以设置可个选项,把整个该子进程的整个进程组都干掉。 设置为true的话,一般killasgroup也会被设置为true。需要注意的是,该选项发送的是stop信号默认为false。。非必须设置。。
;killasgroup=false             ; 这个和上面的stopasgroup类似,不过发送的是kill信号
;user=chrism                   ; 如果supervisord是root启动,我们在这里设置这个非root用户,可以用来管理该program默认不设置。。。非必须设置项
;redirect_stderr=true          ; 如果为true,则stderr的日志会被写入stdout日志文件中默认为false,非必须设置
;stdout_logfile=/a/path        ; 子进程的stdout的日志路径,可以指定路径,AUTO,none等三个选项。设置为none的话,将没有日志产生。设置为AUTO的话,将随机找一个地方生成日志文件,而且当supervisord重新启动的时候,以前的日志文件会被清空。当 redirect_stderr=true的时候,sterr也会写进这个日志文件
;stdout_logfile_maxbytes=1MB   ; 日志文件最大大小,和[supervisord]中定义的一样。默认为50
;stdout_logfile_backups=10     ; 和[supervisord]定义的一样。默认10
;stdout_capture_maxbytes=1MB   ; 这个东西是设定capture管道的大小,当值不为0的时候,子进程可以从stdout发送信息,而supervisor可以根据信息,发送相应的event。默认为0,为0的时候表达关闭管道。。。非必须项
;stdout_events_enabled=false   ; 当设置为ture的时候,当子进程由stdout向文件描述符中写日志的时候,将触发supervisord发送PROCESS_LOG_STDOUT类型的event默认为false。。。非必须设置
;stderr_logfile=/a/path        ; 这个东西是设置stderr写的日志路径,当redirect_stderr=true。这个就不用设置了,设置了也是白搭。因为它会被写入stdout_logfile的同一个文件中默认为AUTO,也就是随便找个地存,supervisord重启被清空。。非必须设置
;stderr_logfile_maxbytes=1MB   ; 这个出现好几次了,就不重复了
;stderr_logfile_backups=10     ; 这个也是
;stderr_capture_maxbytes=1MB   ; 这个一样,和stdout_capture一样。 默认为0,关闭状态
;stderr_events_enabled=false   ; 这个也是一样,默认为false
;environment=A="1",B="2"       ; 这个是该子进程的环境变量,和别的子进程是不共享的
;serverurl=AUTO                ;

3:运行

systemctl start supervisord

4:web界面操作

需要在supervisor的配置文件里添加[inet_http_server]选项组:之后可以通过http://10.211.55.11:9001来访问控制子线程的管理。

[inet_http_server]
port=10.211.55.11:9001
username=user
password=123

效果:

5:子进程管理(supervisorctl)

1) 查看所有子进程的状态:

# supervisorctl status
blog                             RUNNING    pid 2395, uptime 0:08:41

2)关闭、开启指定的子进程:

# supervisorctl stop blog
blog: stopped# supervisorctl start blog
blog: started

3)关闭、开启所有的子进程:

# supervisorctl stop all
blog: stopped
# supervisorctl start all
blog: started

6:可以通过supervisorctl -s http://127.0.0.1:port来控制启停

转载于:https://www.cnblogs.com/jokerbj/p/9269399.html

supervisor 管理相关推荐

  1. mysql用supervisor管理_使用Supervisor管理进程

    1.  Superivisor简介: Supervisor是一个C/S系统,它允许用户在类UNIX系统上监控和管理一系列的进程.你可以把一个进程以Daemon的形式用Supervisor来管理. 2. ...

  2. 【Redis】CentOS7下redis的安装+supervisor管理+允许远程访问+测试部署效果

    一.redis的安装 第一步:下载redis安装包 wget http://download.redis.io/releases/redis-4.0.6.tar.gz 第二步:解压压缩包 tar -z ...

  3. docker之使用supervisor管理多个进程

    docker题外话: centos7安装supervisor: 源码编译安装: 下载源码文件:supervisor-3.3.1.tar.gz 下载地址:https://pypi.python.org/ ...

  4. Supervisor管理hhvm进程

    2019独角兽企业重金招聘Python工程师标准>>> hhvm速度很快,但由于与网站程序兼容性或hhvm本身不成熟,跑一段时间后会出现hhvm经常宕掉,而前台出现502 bad g ...

  5. Django使用supervisor管理celery和uwsgi实践记录 uwsgi BACKOFF Exited too quickly (process log may have details)

    Django使用supervisor管理celery和uwsgi实践记录 安装下载supervisor不用多说. 直接上配置文件: vir_path标识虚拟环境路径 pro_path标识项目路径 全部 ...

  6. Springboot部署Nginx,配合Supervisor管理Springboot进程

    Springboot部署Nginx,配合Supervisor管理Springboot进程 1.打包项目 2.项目放置目录 3.通过yum方式安装nginx,supervisor 4.配置nginx 进 ...

  7. 使用supervisor管理laravel队列 - 配置文件supervisord.conf

    相关文章 上一篇:使用supervisor管理laravel队列 ,此篇重点性描述了我本地配置supervisor的全部过程:但是并未介绍为啥这么配置,这里,我就来记录一下配置supervisor的各 ...

  8. 宝塔 Supervisor管理器 自动重启守护进程

    属于歪门邪道,不多BB,直接上方法 在创建的.py文件中输入以下脚本 from supervisor_main import * class Get:def __init__(self):self.p ...

  9. 在Docker里使用(支持镜像继承的)supervisor管理进程(转)

    这篇文章是受 dockboard 之托帮忙翻译的与 docker 有关的技术文章.译自 Using Supervisor with Docker to manage processes (suppor ...

  10. supervisor 管理进程

    一.简介 (1) 基于python编写,安装方便 (2) 进程管理工具,可以很方便的对用户定义的进程进行启动,关闭,重启,并且对意外关闭的进程进行重启 ,只需要简单的配置一下即可,且有web端,状态. ...

最新文章

  1. 中tr不能显示字符_BeautifulSoup4中find 和find_all的比较
  2. Sublime使用的插件和快捷键
  3. 2019年pta作业第二题——求最大值及其下标
  4. 在linux CentOS 上安装chrome 谷歌浏览器
  5. linux执行某个目录的程序
  6. Ajax ToolKit --- ModelPopupExtender应用经验二则
  7. 全国计算机等级考试题库二级C操作题100套(第21套)
  8. Java命令行界面(第6部分):JOpt简单
  9. android 混合开发 图片,混合开发的大趋势之一React Native之Image
  10. 对软件工程的问题及个别软件的分析
  11. 如何滚动更新 Service?- 每天5分钟玩转 Docker 容器技术(102)
  12. 华为音量键只能调通话_华为手机音量键的隐藏功能,知道一个就会好用不少!...
  13. 植保飞行器(G 题)--2021 年全国大学生电子设计竞赛
  14. PaddleOCR二次全流程——1. 确定字体
  15. 一文详解蒙特卡洛(Monte Carlo)法及其应用
  16. java内存模型作用是什么意思_JMM(Java内存模型)是什么?为什么使用并发?
  17. springboot老年康复中心信息管理系统的设计与实现毕业设计-附源码250859
  18. Java之十五 JDBC编程
  19. CSW博客《摧毁真相:虚假新闻的猖獗泛滥》
  20. Windows10下编译DOTA_devkit

热门文章

  1. sqlserver中where条件加判断
  2. [LeetCode]168. Excel Sheet Column Title
  3. [原]Greenplum failed segment的恢复方法
  4. Technical Art Director
  5. Java(面向对象OOP)
  6. 虫师Selenium2+Python_11、自动化测试项目实战
  7. 关于阿里巴巴发布普惠体的一些思考
  8. 微信小程序学习笔记(阶段一)
  9. 七月算法--12月机器学习在线班-第九次课笔记—推荐系统
  10. 第八周 4.18 --- 4.24