Supervisor (http://supervisord.org) 是一个用 Python 写的进程管理工具,可以很方便的用来启动、重启、关闭进程,supervisor可以同时监控多个进程,并可以在进程死亡时自动重新拉起。

在supervisor使用过程中也会遇到一些问题,这里对遇到的问题进行记录:

1.supervisor监控的进程需要重启自己,并且调用supervisor的命令进行重启。

例如子进程的名字叫做testProcess,在testProcess进程中通过如下命令进行重启

/usr/bin/supervisorctl restart testProcess

,这种情况下你可能会发现进程aics停止了,但是没有重启。

观察进程配置,可以看到stopasgroup这个配置项。实际测试,这个配置项开启状态(默认开启)下,监控进程创建的子进程也会纳入stop监控,此时如果调用supervisor的命令导致进程停止,那么进程的子进程也会被停止。猜测

/usr/bin/supervisorctl restart testProcess 的命令是先调用stop,stop之后再调用start,但是stop时由于自己本身是监控进程的子进程,因此也会被停止,start的部分根本执行不到。
; [program:testProcess]是被管理的进程配置参数,testProcess是进程的名称
[program:testProcess]
command=/opt/tomca/bin/catalina.sh run ; 程序启动命令
autostart=true ; 在supervisord启动的时候也自动启动
startsecs= ; 启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒
autorestart=true ; 程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启
startretries= ; 启动失败自动重试次数,默认是3
user=tomcat ; 用哪个用户启动进程,默认是root
priority= ; 进程启动优先级,默认999,值小的优先启动
redirect_stderr=true ; 把stderr重定向到stdout,默认false
stdout_logfile_maxbytes=20MB ; stdout 日志文件大小,默认50MB
stdout_logfile_backups = ; stdout 日志文件备份数,默认是10
; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile=/opt/tomcat/logs/catalina.out
stopasgroup=false ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
killasgroup=false ;默认为false,向进程组发送kill信号,包括子进程

因此这种情况下要达到目的可以采用如下方法:

a.将stopasgroup的配置修改为false,不过这个需要考虑进程业务上是否会产生其他子进程,在进程死亡时,子进程是否需要停止

b.将调用命令改为 /usr/bin/supervisorctl reload,这样是重新加载配置并且重启所有监控进程,如果一个supervisor监控了多个进程,那么不建议这么做

c.借助第三方进程,由监控进程组内的进程来完成,只需给其发送消息即可

supervisor 使用tips的更多相关文章

  1. Ten Tips for Writing CS Papers, Part 2

    Ten Tips for Writing CS Papers, Part 2 This continues the first part on tips to write computer scien ...

  2. supervisor运行golang守护进程

    最近在鼓捣golang守护进程的实现,无意发现了supervisor这个有意思的东西.supervisor是一个unix的系统进程管理软件,可以用它来管理apache.nginx等服务,若服务挂了可以 ...

  3. 进程管理工具supervisor的使用

    centos 6.5, python 2.6, supervisor 3.3.1: Linux下后台运行程序通常的做法是用nohub,然后配以进程的检测来实现服务式的操作,但其实有更好的选择super ...

  4. nginx, supervisor, celery

      资料: supervisor和nginx使用 1 .supervisor 管理进程工具 2 .nginx 反向代理, 负载均衡 安装nginx $ sudo apt-get update $ su ...

  5. CentOS 下部署Nginx+Gunicorn+Supervisor部署Flask项目

    原本之前有一部分东西是在Windows Server,但是由于Gunicorn不支持Windows部署起来颇为麻烦.最近转战CentOS,折腾一段时间,终于简单部署成功.CentOS新手,作为一个总结 ...

  6. uwsgi+nginx+virtualenv+supervisor

    一.linux安装Python 1.依赖 `yum install gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl ...

  7. Mac上MySQL忘记root密码且没有权限的处理办法&workbench的一些tips (转)

    忘记Root密码肿么办 Mac上安装MySQL就不多说了,去mysql的官网上下载最新的mysql包以及workbench,先安装哪个影响都不大.如果你是第一次安装,在mysql安装完成之后,会弹出来 ...

  8. asp.net core 负载均衡集群搭建(centos7+nginx+supervisor+kestrel)

    概述 本文目的是搭建三台asp.net core 集群, 并配上 nginx做负载均衡   首先准备要运行的源码 http://pan.baidu.com/s/1c20x0bA 准备三台服务器(或则虚 ...

  9. 进程监控工具supervisor 启动Mongodb

    进程监控工具supervisor 启动Mongodb 一什么是supervisor Superviosr是一个UNIX-like系统上的进程监控工具. Supervisor是一个Python开发的cl ...

随机推荐

  1. Red Hat Linux相关产品iso镜像下载

    Linux系统各发行版镜像下载(持续更新) http://www.linuxfly.org/post/659/ http://www.linuxidc.com/Linux/2007-09/7399.h ...

  2. CSV文件读取类

    最近项目中,经常需要读取Csv文件.基本步骤是: (1)按行读取 (2)然后将一行数据按逗号,分割为字符串数组 (3)将各列字符串转换成相应类型的数据 ,如int double类型 写了一个简单的Cs ...

  3. Bootstrap抽样(自展法)

    Bootstrap又称自展法,是用小样本估计总体值的一种非参数方法,在进化和生态学研究中应用十分广泛.例如进化树分化节点的自展支持率等. Bootstrap的思想,是生成一系列bootstrap伪样本 ...

  4. spring AOP的注解实例

    上一篇写了spring AOP 的两种代理,这里开始AOP的实现了,个人喜欢用注解方式,原因是相对于XML方式注解方式更灵活,更强大,更可扩展.所以XML方式的AOP实现就被我抛弃了. 实现Sprin ...

  5. oracle_多字段统计(多count)

    oracle_多字段统计 查询同一张表中同一字段的不同值的综合,方法如下: select o.code 礼品代码, o.name 礼品名称, l.couponactivityid 券活动定义, cou ...

  6. Python 操作 SQL 数据库 (ORCAL)

    MySQLdb.connect是python 连接MySQL数据库的方法,在Python中 import MySQLdb即可使用,至于connect中的参数很简单:host:MySQL服务器名user ...

  7. oracle中 start with .. connect by prior.. 用法简介

    我们经常会将一个比较复杂的目录树存储到一个表中.或者将一些部门存储到一个表中,而这些部门互相有隶属关系.这个时候你就会用到connect by prior start with.oracle 提供了s ...

  8. Java判断字符串是否符合yyyyMMdd日期格式

    Java判断字符串是否符合yyyyMMdd日期格式 代码: /** * 判断参数的格式是否为“yyyyMMdd”格式的合法日期字符串 * */ public static boolean isVali ...

  9. 20145301《网络对抗》shellcode注入&Return-to-libc攻击深入

    20145301<网络对抗>shellcode注入&Return-to-libc攻击深入 Shellcode注入 shellcode是什么? Shellcode是指能完成特殊任务的 ...

  10. phpstorm2016.1 添加对Drupal的编程支持

    一.前言 phpstorm作为目前对drupal支持最好的开发工具之一,是drupal模块开发的首选工具.今天我就来谈谈最新的phpstorm如何添加对drupal模块的支持. 相关环境:操作系统ub ...