centos 6.5, python 2.6, supervisor 3.3.1;

Linux下后台运行程序通常的做法是用nohub,然后配以进程的检测来实现服务式的操作,但其实有更好的选择supervisor,尤其是在多个程序需要管理时;

安装

yum直接安装的版本比较低,推荐使用Python的包安装工具进行安装:

# pip install supervisor

如果没有pip这个命令就:

# yum install python-pip -y

验证安装:

# supervisord -version
  3.3.

配置

生成主配置文件:

# echo_supervisord_conf > /etc/supervisord.conf

修改/etc/supervisord.conf末尾的include段:

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

把自己的程序配置放到/etc/supervisord.d/里面:

# mkdir -p /etc/supervisord.d/
# vi /etc/supervisord.d/myapp.ini
[program:myapp]
command=/bin/sh /bin/myapp.sh  #程序启动命令
autostart=false  #是否随supervisord启动
autorestart=false  #退出后是否自动重启,可选unexpected表示异常退出时才自动重启
user=root  #启动用户
redirect_stderr=false  #是否把stderr重定向到stdout
stdout_logfile=/var/log/myapp.stdout  #stdout重定向到文件
stderr_logfile=/var/log/myapp.stderr  #stderr重定向到文件

这里只写了常用的配置,更多可参考/etc/supervisord.conf中的例子;

下面是程序myapp.sh的内容:

# cat /bin/myapp.sh
  #!/bin/sh
  n=
  while true
  do
  echo myapp $n
  let n++
  sleep
  done

使用

启动服务(可能会有警告说用了root用户,配置文件不是指定的而是搜索到的,没有影响):

# supervisord

使用命令supervisorctl可以进入supervisor的客户端shell,支持自动补全,输入help查看都有那些命令可用:

也可以用supervisorctl+cmd不进入shell进行操作:

下面介绍常用的命令:

reload            重启supervisord服务

shutdow          停止supervisord服务

maintail [-30/-f]       类似tail命令的方式查看服务进程的控制台输出

status            列出所管理程序的状态

start/stop/restart myapp  启动/停止/重启指定程序

pid             服务进程ID

pid myapp            指定程序的进程ID

tail [-30/-f] myapp       类似tail命令的方式查看指定程序的控制台输出

tips: 如果是Python程序,会发现用print打印的内容supervisorctl tail看不到,原因是缓存,把配置中的command改为python -u myapp.py即可;

分组

程序较多时可以用supervisorctl start all来统一操作,但如果程序较多但又不能统一操作呢?答案是分组,可以统一操作的分到一个组;

分组是在配置了program的基础上进行的,根据上节的内容,假设配置了两个program:

[program:myapp1]

[program:myapp2]

来把这两个配置为一个组app:

# vi /etc/supervisord.d/app.ini
[group:app]
programs=myapp1,myapp2

在supervisor的shell中操作分组:

tips:分组后,单个操作时需要带上组名:supervisorctl tail app:myapp1;

over

进程管理工具supervisor的使用的更多相关文章

  1. 进程管理工具supervisor

    1. 简介 supervisor有两个组件:supervisord和supervisorctl,组成了client/server结构. supervisord负责读入配置文件,然后supervisor ...

  2. Linux进程管理工具Supervisor的安装配置

    目录 Linux进程管理工具Supervisor的安装配置 简介 安装Python包管理工具 安装Supervisor 配置 配置文件参数说明 配置进程管理 启动supervisor 控制进程 交互终 ...

  3. Linux进程管理工具——supervisor

    介绍 Supervisord是用Python实现的一款非常实用的进程管理工具 安装 这里用源码 supervisor-.tar.gz .tar.gz cd supervisor- sudo pytho ...

  4. Python 进程管理工具 Supervisor 使用教程

    Supervisor 是基于 Python 的进程管理工具,只能运行在 Unix-Like 的系统上,也就是无法运行在 Windows 上.Supervisor 官方版目前只能运行在 Python 2 ...

  5. linux 使用进程管理工具 supervisor

    1.supervisor是使用python进行开发的运行在linux服务器上的进程管理工具 老版本的supervisor需要运行在python2环境,如果需要使用supervisor管理python3 ...

  6. 进程管理工具 Supervisor

    要想在终端后台常驻进程,首先想到的是在命令后加 & 符号,来达到隐藏程序在后台的目的,尽管看起来进程已经在后台运行了,实际上终端会话关闭时进程还是会被 kill 掉,这种问题一般是采用搭配 n ...

  7. 进程管理工具Supervisor(一)简介与使用

    Supervisor是用Python开发的一套client/server架构的进程管理程序,能做到开机启动,以daemon进程的方式运行程序,并可以监控进程状态等等. linux进程管理方式有传统的r ...

  8. python进程管理工具Supervisor

    一.Supervisor简单介绍 supervisor是一个 Client/Server模式的系统,允许用户在类unix操作系统上监视和控制多个进程,或者可以说是多个程序.supervisor与lau ...

  9. 进程管理工具Supervisor(二)Events

    supervisor可以当做一个简单的进程启动.重启.控制工具使用,也可以作为一个进程监控框架使用,作为后者,需要使用supervisor的Events机制. Event Listeners supe ...

  10. Linux进程管理工具Supervisor

    简述 Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启. 它是通过fork/exec的方式把这些被管 ...

随机推荐

  1. [原]eclipse + pydev :Error in sitecustomize; set PYTHONVERBOSE for tracaeback: KeyError: 'sitecustomize'

    问题点: 安装 eclipse + pydev的时候出现 Error in sitecustomize; set PYTHONVERBOSE for tracaeback: KeyError: 'si ...

  2. python根据字符串导入模块

    问题: path = "auth.my_auth.AUTH" # 根据path实例化AUTH类 解决: path = "auth.my_auth.AUTH" i ...

  3. 将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库

    目的 本教程介绍如何使用 Entity Framework.语言集成查询 (LINQ),以及如何对 Oracle 数据库使用 Model-First 以生成数据定义语言 (DDL) 脚本. 所需时间 ...

  4. ArcGIS AddIN开发之 设置当前工具为Edit Tool

    在GIS数据处理中,经常需要选择要素,再进行操作.所以,为了处理的方便,可以将当前工具处理结束后,将当前工具设置为Edit Tool,以方便下一次的选择处理. 相关资料: 1.ArcMap Name ...

  5. Codeforces 483 - A/B/C/D/E - (Done)

    题目链接:http://codeforces.com/contest/483 A - Counterexample - [简单构造题] Your friend has recently learned ...

  6. pandas 2

    ============== sdf={'rkey':[1,2,3,2],'name':['rkey1','rkey2','rkey3','rkey4']}sdf2={'lkey':[1,2,3],' ...

  7. 如何生成Junit报告

    前言: 对Eclipse的工程写单元测试: 1. 一个工程有多个测试类,将测试类放到一个测试包下. 2. 每一个测试类写好,都单独执行run as ->JUnit Test测一下.    3. ...

  8. 学习笔记:Makefile的ifeq逻辑或,逻辑与的变通实现

        (1)ifeq的用法 ifeq ($(变量名), 变量值 ) ........ else ifeq ($(..), ..) ......... else ......... endif (2) ...

  9. Jmeter使用之-断言

    添加响应断言 ,一般下面这样选择断言的设置就可以了 个人习惯是直接从响应数据中直接复制正确的接口返回值到断言的测试模式中,如下          !!!但是这样复制的是有问题的 ,需要在测试模式中去掉 ...

  10. object-c中疑问

    *一般是加在方法的返回值类型声明部分的,比如:-(NSString *)executeSomeThing;+(NSString *)executeAnotherThing; -(int)addOne; ...