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