zoukankan      html  css  js  c++  java
  • Linux:supervisor命令的使用

    supervisor是Linux下一个便利的启动和监控服务的命令。

    举例来说:假如我想同时管理一堆的服务,包括他们的运行和停止。我就可以使用supervisor来管理。
     
    supervisor包括两个命令:supervisord和supervisorctl,分别是后台的守护进程以及命令行管理命令。要安装这两个命令只需要执行sudo apt-get install supervisor即可。
    两个命令共用一个配置文件,默认是:/etc/supervisor/supervisor.conf,而supervisor.conf 通过[include] 这个section来引入其它配置文件,一般放在/etc/supervisor/conf.d目录,所以我们可以将需要的文件放到这个目录之下,并将后缀改为.conf。
     
    除了默认的配置之外,一个常用的配置方式是在使用启动的时候指定特定的配置文件,配置方式为:  sudo  supervisord  -c  /path/to/supervisor.conf    ,注意,这时候的配置文件要使用绝对路径,并且配置文件要完整,否则可能会报错。
    supervisord只会启动一个supervisord守护进程,剩下的管理工作都交给supervisorctl命令来完成。同样的,如果指定了某一个配置文件来启动服务,那么supervisorctl的命令也要加上相对应的路径来管理:sudo supervisorctl -c /path/to/supervisor.conf,这个命令敲下之后就会进入命令行模式,对应用进行管理。
     

    典型的supervisor.conf配置如下:(配置文件的注释用分号开头)

    ; supervisor config file
    [unix_http_server]  ; supervisor与supervisorctl的通讯
    file=/var/run/supervisor.sock   ; (the path to the socket file)  should match serverurl in section supervisorctl
    chmod=0700                       ; sockef file mode (default 0700)
     
    [supervisord]  ; 必须有,用来配置supervisord
    logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log)
    pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
    childlogdir=/var/log/supervisor            ; ('AUTO' child log dir, default $TEMP)
     
    ; the below section must remain in the config file for RPC  
    ; (supervisorctl/web interface) to work, additional interfaces may be
    ; added by defining them in separate rpcinterface: sections
    [rpcinterface:supervisor] ; 这个配置项必须有
    supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
     
    [supervisorctl]   ; 必须有,用于配置supervisorctl
    serverurl=unix:///var/run/supervisor.sock ; use a unix:// URL  for a unix socket
     
    ; The [include] section can just contain the "files" setting.  This
    ; setting can list multiple files (separated by whitespace or
    ; newlines).  It can also contain wildcards.  The filenames are
    ; interpreted as relative to this file.  Included files *cannot*
    ; include files themselves.
     
    [include]  ;引入其它配置文件
    files = /path/to/*.conf  # other configuration files you want to include
     
    [program:api4c]  ;应用程序的配置 
    command=/path/to/python/env/bin/gunicorn -w 1 -b 0.0.0.0:8888  wsgi:application ; 执行你的命令,不能是用于启动守护进程,因为supervisor就是用来作为守护进程的
    directory=/home/ubuntu/4c-entry/api4c  ; chdir to here before command run
    startsecs=0        ;
    stopwaitsecs=0     ;
    autostart=true    ; supervisord启动的时候自动运行
    autorestart=true  ; 当程序中断的时候是否重启 stop,true,false,unexpected
    stdout_logfile=/path/to/logfile.log  ; 必须已经存在
    stderr_logfile=/path/to/std/err/log/for4c.err
    上面是一个基本的服务,用于管理一个服务进程,包含几个必要的section:supervisord、supervisorctl、program:your_program_name、rpcinterface:supervisor、include。
    这几个是一定要配置的,缺少supervisord和supervisorctl和rpcinterface:supervisor会报错,include是可选的,如果你没有引入其他的配置文件的话。
    关于supervisord和supervisorctl的通讯方式有两种:一种是通过sock来传输,也就是unix_http_server的配置,另一种是inet_http_server,通过http进行通讯,详细的设置可以参考supervisor的配置文档。
     

    supervisor的常用命令:

    supervisord -c supervisor.conf                             通过配置文件启动supervisor
    supervisorctl -c supervisor.conf status                    察看supervisor的状态
    supervisorctl -c supervisor.conf reload                    重新载入 配置文件  更新后可以选择重新载入
    supervisorctl -c supervisor.conf start [all] |  [appname]     启动指定/所有 supervisor管理的程序进程
    supervisorctl -c supervisor.conf stop [all] | [appname] 

    命令使用实例:

    来源: http://chenxiaoyu.org/2011/05/31/python-supervisor.html 

    配置项:

    [program:hello] 
    command=python /home/smallfish/hello.py 
    autorstart=true 
    stdout_logfile=/home/smallfish/hello.log
    命令
    shell> sudo /etc/init.d/supervisor start   -- 启动supervisor服务 
    shell> sudo supervisorctl status hello     -- 获取hello服务的状态,因为是autorstart,这里已经启动了 hello  RUNNING    pid 1159, uptime 0:20:32 
    shell> sudo supervisorctl stop hello       -- 停止hello服务 hello: stopped 
    shell> sudo supervisorctl stop hello       -- 再次停止hello,会有错误信息 hello: ERROR (not running) 
    shell> sudo supervisorctl start hello      -- 启动hello服务 hello: started

    常用的配置项:

    详见: http://supervisord.org/configuration.html

  • 相关阅读:
    ↗☻【高性能网站建设进阶指南 #BOOK#】第3章 拆分初始化负载
    ↗☻【高性能网站建设进阶指南 #BOOK#】第7章 编写高效的JavaScript
    【JavaScript】text
    ↗☻【高性能网站建设进阶指南 #BOOK#】第5章 整合异步脚本
    ↗☻【高性能网站建设进阶指南 #BOOK#】第10章 图像优化
    利用十大最佳游戏开发工具开发游戏
    传奇服务器端/客户端 完整源代码
    order by union 应用实例 mssql
    Nine Digits Expression
    Ninedigit Fractions
  • 原文地址:https://www.cnblogs.com/zhangjpn/p/7056324.html
Copyright © 2011-2022 走看看