在 web 應用部署到線上後,須要保證應用一直處於運行狀態,在遇到程序異常、報錯等狀況,致使 web 應用終止時,須要保證程序能夠馬上重啓,繼續提供服務。
因此,就須要一個工具,時刻監控 web 應用的運行狀況,管理該進程。
Supervisor 就是解決這種需求的工具,能夠保證程序崩潰後,從新把程序啓動起來等功能。python
Supervisor 是一個用 Python 寫的進程管理工具,能夠很方便的用來在 UNIX-like 系統(不支持 Windows)下啓動、重啓(自動重啓程序)、關閉進程(不單單是 Python 進程)。
# via easy_install $ easy_install supervisor # via pip # yum intall epel-release # yum install python-pip $ pip install supervisor
# 建立配置文件 $ echo_supervisord_conf >> /etc/supervisord.conf # 修改配置 /etc/supervisord.conf [include] files = /etc/supervisord.conf.d/*.conf # 新建管理的應用 $ cd /etc/supervisord.conf.d $ vim beepkg.conf # 配置文件: [program:beepkg] ; 程序名稱,在 supervisorctl 中經過這個值來對程序進行一系列的操做 directory=/opt/app/beepkg ; 程序的啓動目錄 command=/opt/app/beepkg/beepkg ; 啓動命令,與手動在命令行啓動的命令是同樣的 autostart=true ; 在 supervisord 啓動的時候也自動啓動 autorestart=unexpected ; 程序異常退出後自動重啓 startsecs=5 user=root ; 用哪一個用戶啓動 redirect_stderr=true ; 把 stderr 重定向到 stdout,默認 false ; stdout 日誌文件,須要注意當指定目錄不存在時沒法正常啓動,因此須要手動建立目錄(supervisord 會自動建立日誌文件) stdout_logfile =/data/log/beepkg.log stdout_logfile_maxbytes=20MB ; stdout 日誌文件大小,默認 50MB stdout_logfile_backups=20 ; stdout 日誌文件備份數 environment=PATH="/home/app_env/bin" ; 能夠經過 environment 來添加須要的環境變量,一種常見的用法是使用指定的 virtualenv 環境
Supervisord 安裝完成後有兩個可用的命令行 supervisord 和 supervisorctl,命令使用解釋以下
$ supervisord -c /etc/supervisord.conf # 初始啓動 Supervisord,啓動、管理配置中設置的進程。 $ supervisorctl stop beepkg #中止某一個進程(programxxx),programxxx 爲 [program:beepkg] 裏配置的值,這個示例就是 beepkg。 $ supervisorctl start beepkg #啓動某個進程 $ supervisorctl restart beepkg #重啓某個進程 $ supervisorctl stop groupworker: #重啓全部屬於名爲 groupworker 這個分組的進程(start,restart 同理) $ supervisorctl stop all #中止所有進程,注:start、restart、stop 都不會載入最新的配置文件。 $ supervisorctl reload #載入最新的配置文件,中止原有進程並按新的配置啓動、管理全部進程。 $ supervisorctl update #根據最新的配置文件,啓動新配置或有改動的進程,配置沒有改動的進程不會受影響而重啓。