supervisor是一個python編寫的進程管理工具, 能夠方便的管理和監控進程. supervisor分爲服務端supervisord和客戶端supervisorctl.python
supervisor由python編寫, 能夠使用pip安裝:shell
pip install supervisor
也能夠使用apt-get來安裝:服務器
apt-get install supervisor
在/etc/supervisor
目錄下能夠看到supervisord的主要配置文件supervisord.conf
:socket
; 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文件:url
[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配置都要設置這三項.unix
autostart=true
表示在supervisord啓動時該子進程會自動啓動. 在服務器重啓後只須要重啓supervisord, 再也不須要一個一個地啓動進程.rest
autoresatrt=trus
表示若該子進程崩潰, supervisor會自動重啓該進程.code
supervisorctrl客戶端能夠查看子進程的狀態並進行控制:server
supervisorctl status
查看各子進程運行狀態
supervisorctl start <program>
根據program配置啓動相應的子進程
supervisorctl stop <program>
中止子進程
supervisorctl restart <program>
重啓子進程
supervisorctl reread
從新讀入配置文件, 但不會增長新的程序
supervisorctl update
根據新讀入配置文件, 更新程序配置
須要注意的一點是supervisor更新配置文件比較麻煩, 更新原有程序的配置須要reread - update - restart
三個操做, 而添加新程序也須要reread - update - start
.