本文作者:陳進堅
博客地址:https://jian1098.github.io
CSDN博客:https://blog.csdn.net/c_jian
聯繫方式:[email protected]
前言
做過系統軟件開發的人都會遇到,如果寫好的程序需要在Linux
後臺運行時不太好處理,用nohup
和&
放到後臺的話,很難對線程進行停止和重啓操作。Supervisor
(http://supervisord.org) 是一個用 Python 寫的進程管理工具,可以很方便的實現啓動、重啓、關閉進程、意外停止自動重啓、日誌分割等功能。除了對單個進程的控制,還可以同時啓動、關閉多個進程,比如很不幸的服務器出問題導致所有應用程序都被殺死,此時可以用 supervisor 同時啓動所有應用程序而不是一個一個地敲命令啓動,同時Supervisor
提供web管理頁面可以進行遠程管理,非常方便。
安裝supervisor
Centos
[root@ztg ~]# yum install epel-release #如果已經有python環境可以跳過前兩步
[root@ztg ~]# yum install -y python-pip
[root@ztg ~]# pip install supervisor
Ubuntu
[root@ztg ~]# apt-get install supervisor
配置supervisor
生成配置文件
[root@ztg ~]# echo_supervisord_conf > /etc/supervisord.conf
如果出現下面的錯誤
Traceback (most recent call last):
File "/usr/bin/supervisord", line 5, in <module>
from pkg_resources import load_entry_point
File "/usr/lib/python2.6/site-packages/pkg_resources.py", line 2655, in <module>
working_set.require(__requires__)
File "/usr/lib/python2.6/site-packages/pkg_resources.py", line 648, in require
needed = self.resolve(parse_requirements(requirements))
File "/usr/lib/python2.6/site-packages/pkg_resources.py", line 546, in resolve
raise DistributionNotFound(req)
pkg_resources.DistributionNotFound: meld3>=0.6.5
請以此執行下面4行命令再生成配置文件
[root@ztg ~]# wget https://pypi.python.org/packages/source/m/meld3/meld3-1.0.2.tar.gz
[root@ztg ~]# tar -zxf meld3-1.0.2.tar.gz
[root@ztg ~]# cd meld3-1.0.2
[root@ztg ~]# python setup.py install
編輯/etc/supervisord.conf
,在最後增加要自定義運行程序的配置信息:(舉例的httpserver是用golang實現的簡單的http服務程序)
[root@ztg ~]# vi /etc/supervisord.conf
[program:httpserver]
command=/bin/bash -c "/home/ztg/httpserver"
autostart=true
autorestart=true
startsecs=10
stdout_logfile=/var/log/go_http_server_info.log
stdout_logfile_maxbytes=2MB
stdout_logfile_backups=30
stdout_capture_maxbytes=2MB
stderr_logfile=/var/log/go_http_server_error.log
stderr_logfile_maxbytes=2MB
stderr_logfile_backups=30
stderr_capture_maxbytes=2MB
配置說明
[program:程序名]
command=/bin/bash -c "需要執行的命令,多句命令用分號隔開"
autostart=true 是否跟隨supervisor一起啓動
autorestart=true 如果該程序掛了,是否重新啓動
startsecs=10
stdout_logfile=/var/log/go_http_server_info.log 終端標準輸出重定向文件
stdout_logfile_maxbytes=2MB 文件最大大小
stdout_logfile_backups=30 文件備份最大數量
stdout_capture_maxbytes=2MB
stderr_logfile=/var/log/go_http_server_error.log 終端錯誤輸出重定向文件
stderr_logfile_maxbytes=2MB
stderr_logfile_backups=30
stderr_capture_maxbytes=2MB
操作supervisor
啓動supervisor,使用默認配置文件:
$ supervisord
或者指定配置文件:
$ /usr/bin/supervisord -c /etc/supervisord.conf
啓動supervisor
之後可以執行supervisorctl
相關命令
supervisorctl
常用命令:
命令 | 說明 |
---|---|
supervisorctl stop program_name | 停止某個進程 |
supervisorctl start program_name | 啓動某個進程 |
supervisorctl restart program_name | 重啓某個進程 |
supervisorctl stop all | 停止全部進程 |
supervisorctl reload | 載入最新的配置文件,停止原有進程並按新的配置啓動、管理所有進程 |
supervisorctl update | 根據最新的配置文件,啓動新配置或有改動的進程,配置沒有改動的進程不會受影響而重啓 |
查看運行狀態並進入控制檯,在控制檯中執行命令可以省去supervisorctl
命令
$ supervisorctl
httpserver RUNNING pid 34236, uptime 0:00:28
supervisor> stop httpserver
httpserver: stopped
Web管理頁面
supervisor
提供了可視化的Web管理頁面,允許遠程操作,但是需要在配置文件手動打開。
打開配置文件
$ vi /etc/supervisord.conf
將下面幾行前面的分號去掉,修改一下數據保存退出
[inet_http_server] ; HTTP 服務器,提供 web 管理界面
port=192.168.1.194:9001 ; Web 管理後臺運行的 IP 和端口,如果開放到公網,需要注意安全性
username=user ; 登錄管理後臺的用戶名
password=123 ; 登錄管理後臺的密碼
重新載入配置
$ supervisorctl reload
在瀏覽器打開剛剛配置的ip和端口(192.168.1.194:9001)即可彈出登錄框進入管理頁面。
查看日誌
訪問配置文件中定義的日誌文件即可
$ tail -f /var/log/go_http_server_info.log
$ tail -f /var/log/go_http_server_error.log