supervisor是一個python編寫的程序管理工具, 可以友善的管理和監控程序. supervisor分為服務端supervisord和用戶端supervisorctl.
supervisor由python編寫, 可以使用pip安裝:
pip install supervisor
也可以使用apt-get來安裝:
apt-get install supervisor
配置supervisor
在
/etc/supervisor
目錄下可以看到supervisord的主要配置檔案
supervisord.conf
:
; supervisor config file
[unix_http_server]
file=/var/run/supervisor.sock ; (the path to the socket file)
chmod=0700 ; sockef file mode (default 0700)
[supervisord]
logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log)
pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
childlogdir=/var/log/supervisor ; ('AUTO' child log dir, default $TEMP)
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///var/run/supervisor.sock ; use a unix:// URL for a unix socket
[include]
files = /etc/supervisor/conf.d/*.conf
為了便于管理, 我們将需要監控的程序寫入
/etc/supervisor/conf.d/*.conf
中, 這些配置檔案将被導入主配置檔案.
建立一個blog.conf檔案:
[program:blog]
directory=/home/www/Blog
command=uwsgi --ini wsgi.ini
user=www
autostart=true
autorestart=true
stdout_logfile=/home/www/Blog/log/supervisor.log
在啟動blog子程序時supervisord會以user的身份在directory目錄下執行command指令以啟動子程序. 一般情況下, 每個program配置都要設定這三項.
autostart=true
表示在supervisord啟動時該子程序會自動啟動. 在伺服器重新開機後隻需要重新開機supervisord, 不再需要一個一個地啟動程序.
autoresatrt=trus
表示若該子程序崩潰, supervisor會自動重新開機該程序.
使用supervisorctl
supervisorctrl用戶端可以檢視子程序的狀态并進行控制:
-
檢視各子程序運作狀态supervisorctl status
-
根據program配置啟動相應的子程序supervisorctl start <program>
-
停止子程序supervisorctl stop <program>
-
重新開機子程序supervisorctl restart <program>
-
重新讀入配置檔案, 但不會增加新的程式supervisorctl reread
-
根據新讀入配置檔案, 更新程式配置supervisorctl update
需要注意的一點是supervisor更新配置檔案比較麻煩, 更新原有程式的配置需要
reread - update - restart
三個操作, 而添加新程式也需要
reread - update - start
.