[TOC]
0x00 場景
Nginx + uWSGI + Flask 的場景中,當我們的代碼出現異常或者其他一些原因導致服務掛掉,我們會希望能自動重啟
uWSGI
這個時候我們我們可以考慮使用 supervisor
來達到我們的目的。此文接上一篇,因此我的系統還是Raspbian(Debian)。這里分享一些簡單的配置使用。先看一下 supervisor
的介紹:
安裝
這個比較簡單,我們直接使用 apt-get
即可安裝。
pi@raspberrypi:~ $ sudo apt-get install supervisor
(卸載用:apt-get remove)
當然,你也可以用 pip
進行安裝:
sudo pip install supervisor
配置
supervisor
的配置文件位于 /etc/supervisor/
下,如:
pi@raspberrypi:/etc/supervisor $ ls
conf.d supervisord.conf
supervisord.conf
是默認的配置文件,我們無需修改,在 conf.d
目錄下,我們創建自己的配置文件即可,這里我建了一個 uwsgi.conf
文件:
pi@raspberrypi:/etc/supervisor $ cd conf.d/
pi@raspberrypi:/etc/supervisor/conf.d $ touch uwsgi.conf
pi@raspberrypi:/etc/supervisor/conf.d $ sudo nano uwsgi.conf
uwsgi.conf
文件內容:
[program:raspi]
command=/home/pi/raspi/venv/bin/uwsgi /home/pi/raspi/uwsgi.ini
directory=/home/pi/raspi
user=pi
autostart=true
autorestart=true
stdout_logfile=/home/pi/raspi/logs/uwsgi_supervisor.log
stderr_logfile=/home/pi/raspi/logs/uwsgi_supervisor_err.log
- command:執行的命令
- directory:工作的目錄,在執行前會進行切換,由于上面我使用的絕對路徑,可以不配置
- stdout_logfile 和 stderr_logfile 配置我們日志輸出位置
這個配置文件的更多可選參數可參考這里。
supervisor
還提供了一個web管理界面,我們需要先對其進行配置,修改 /etc/supervisor/supervisord.conf
文件,增加如下內容即可:
[supervisorctl]
serverurl=unix:///var/run/supervisor.sock ; use a unix:// URL for a unix socket
serverurl=http://192.168.1.56:9000
username=ttdevs ; (default is no username (open server))
password=admin ; (default is no password (open server))
; 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 = /etc/supervisor/conf.d/*.conf
[inet_http_server] ; inet (TCP) server disabled by default
port=192.168.1.56:9000 ; (ip_address:port specifier, *:port for all iface)
username=ttdevs ; (default is no username (open server))
password=admin ; (default is no password (open server))
操作
安裝好以后,我們有兩個命令可以使用,一個是 supervisord
,另一個是 supervisorctl
,supervisord
負責啟動服務,supervisorctl
負責操作服務,C/S模式。
-
啟動
supervisor
:sudo supervisord
更多的啟動參數可以參考這里。
啟動/重啟/停止某個我們配置的進程:
supervisorctl start/restart/stop programABC
另外在上面的配置中,我們還可以使用瀏覽器訪問 http://192.168.1.56:9000/
對我們的進程進行管理。
參考: