Supervisor使用教程

hejian 8年前發布 | 26K 次閱讀 Supervisor

來自: http://andrewliu.in/2016/02/19/Supervisor使用教程/

本博客采用創作共用版權協議, 要求署名、非商業用途和保持一致. 轉載本博客文章必須也遵循 署名-非商業用途-保持一致 的創作共用協議.

Supervisor: 一個進程控制系統 , 用來監控類UNIX系統中的進程, 能夠方便的啟動, 重啟, 關閉進程( 已經嘗試過Python和Scala項目 )

安裝

Supervisor使用Python開發, 必然是可以使用 pip 進行安裝

$ (sudo) pip install supervisor

配置

通過 echo_supervisord_conf 命令將配置重定向到配置文件中

$ echo_supervisord_conf >/etc/supervisord.conf

自動生成的配置如下:

[unix_http_server]
file=/tmp/supervisor.sock ; UNIX socket 文件,supervisorctl 會使用
;chmod=0700; socket 文件的 mode,默認是0700
;chown=nobody:nogroup ; socket 文件的 owner,格式: uid:gid

;[inet_http_server] ; HTTP 服務器,提供 web 管理界面 ;port=127.0.0.1:9001; Web 管理后臺運行的 IP 和端口,如果開放到公網,需要注意安全性 ;username=user ; 登錄管理后臺的用戶名 ;password=123; 登錄管理后臺的密碼

[supervisord] logfile=/tmp/supervisord.log ; 日志文件,默認是 $CWD/supervisord.log logfile_maxbytes=50MB ; 日志文件大小,超出會 rotate,默認50MB logfile_backups=10; 日志文件保留備份數量默認10 loglevel=info ; 日志級別,默認 info,其它: debug,warn,trace pidfile=/tmp/supervisord.pid ; pid 文件 nodaemon=false; 是否在前臺啟動,默認是false,即以 daemon 的方式啟動 minfds=1024; 可以打開的文件描述符的最小值,默認1024 minprocs=200; 可以打開的進程數的最小值,默認200

; the below section must remain inthe config file for RPC ; (supervisorctl/web interface) to work, additional interfaces may be ; added by defining them inseparate rpcinterface: sections [rpcinterface:supervisor] supervisor.rpcinterface_factory =supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl] serverurl=unix:///tmp/supervisor.sock ; 通過 UNIX socket 連接 supervisord,路徑與 unix_http_server 部分的 file 一致 ;serverurl=http://127.0.0.1:9001; 通過 HTTP 的方式連接 supervisord

; 包含其他的配置文件 [include] files =relative/directory/.ini ; 可以是 .conf 或 *.ini</pre>

  • 通過命令運行supervisord
  • </ul>

    # 或者其他任意路徑下的配置文件
    $ supervisord -c /etc/supervisord.conf

    啟動進程

    我們需要對自己的服務進行一些配置. 服務管理一般將配置文件存放在 /data/etc/supervisor/conf.d 路徑下.

    • [program:x] , 其中x為進程名, 必不可少的
    • command , 項目要運行的命令, 必不可少的
    • process_name , 進程名, 如果要啟動多個進程, 則修改修改, 默認為 %(program_name)%
    • numprocs , 啟動多個項目實例

    # 文件名為 some-project.conf
    [program:some-project] # program后跟著進程名是必須的
    command =/data/apps/some-project/bin/python /data/apps/doraemon/some-project/main.py
    autostart =true
    autorestart =true# 服務掛掉會自動重啟
    loglevel =info# 輸出日志級別
    stdout_logfile =/data/log/supervisor/some-project-stdout.log
    stderr_logfile =/data/log/supervisor/some-project-stderr.log
    stdout_logfile_maxbytes =500MB
    stdout_logfile_backups =50
    stdout_capture_maxbytes =1MB
    stdout_events_enabled =false

    配置的模板基本如上, 只需要根據自己的服務定制 command 就可以了.

    # scala項目的配置
    [program:owl-collector-scala]
    command=java -jar /data/apps/owl-collector-scala/target/scala-2.11/owl-collector-scala-assembly-1.0.jar
    autostart=false
    autorestart=true
    stdout_logfile=/data/log/supervisor/owl-collector-scala.stdout.log
    stderr_logfile=/data/log/supervisor/owl-collector-scala.stderr.log
    stdout_logfile_maxbytes=500MB
    stdout_logfile_backups=50
    stdout_capture_maxbytes=1MB
    stdout_events_enabled=false
    loglevel=info
    priority=1100

    配置完成后, 進行 supervisorctl 命令行管理shell, 輸入 reload 會進行重新加載進程配置.

    # 加載配置
    $ supervisorctl
    supervisor> reload
    Really restart the remote supervisord process y/N? y
    Restarted supervisord

    查看當前進程狀態

    supervisor> status some-project STOPPED Feb 19 11:33 PM

    啟動進程

    supervisor> start some-project</pre>

    supervisorctl

    supervisorctl 是一個命令行工具. 可以與不同的supervisord進程進行通信, 獲取子進程信息, 管理子進程.

    # shell中輸入supervisorctl, 進入交互式的界面
    $ supervisorctl
    > status # 查看當前supervisor管理的進程狀態和運行時間
    > start some-project # 啟動some-project進程
    > stop some-project # 關閉some-project進程
    > restart some-project # 重啟some-project進程
    > reload # 重新加載配置文件(當增加新的配置文件時執行)

    > tail -f some-project stderr # 實時查看some-project的錯誤日志</pre>

    不怎么使用Web進行進程管理, 更詳細的配置信息可以查看 官方文檔

    </div>

    參考鏈接

     本文由用戶 hejian 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
     轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
     本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!