Supervisor是一個C/S系統,它能夠在類UNIX系統上控制系統進程,由python編寫,它提供了大量的功能來實現對進程的管理。python
pip install supervisor
easy_install supervisor
apt-get update apt-get install supervisor #默認配置文件在/etc/supervisor/supervisord.conf
yum install supervisor
先整一個簡單的golang http服務git
package main import ( "fmt" "log" "net/http" ) func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello world") }) err := http.ListenAndServe(":9090", nil) if err != nil { log.Fatal("ListenAndServe: ", err) } }
直接運行這個程序會佔用住終端,下面看看如何用supervisor來跑這個程序。github
編輯/etc/supervisord.conf,在最後增長運行程序設置golang
[program:golang-http-server] command=/home/golang/simple_http_server autostart=true autorestart=true startsecs=10 stdout_logfile=/var/log/simple_http_server.log stdout_logfile_maxbytes=1MB stdout_logfile_backups=10 stdout_capture_maxbytes=1MB stderr_logfile=/var/log/simple_http_server.log stderr_logfile_maxbytes=1MB stderr_logfile_backups=10 stderr_capture_maxbytes=1MB
幾個配置說明:web
command:表示運行的命令,填入完整的路徑便可。
autostart:表示是否跟隨supervisor一塊兒啓動。
autorestart:若是該程序掛了,是否從新啓動。
stdout_logfile:終端標準輸出重定向文件。
stderr_logfile:終端錯誤輸出重定向文件。bash
其他配置說明能夠查看官方文檔。ide
sudo /usr/bin/supervisord -c /etc/supervisord.conf
若是出現什麼問題,能夠查看日誌進行分析,日誌文件路徑/tmp/supervisord.logui
tips:若是修改了配置文件,能夠用kill -HUP從新加載配置文件spa
$ cat /tmp/supervisord.pid | xargs sudo kill -HUP
查看supervisor運行狀態rest
$ supervisorctl golang-http-server RUNNING pid 23307, uptime 0:02:55 supervisor>
輸入help能夠查看幫助
supervisor> help default commands (type help ): ===================================== add clear fg open quit remove restart start stop update avail exit maintail pid reload reread shutdown status tail version
supervisor運行後自己是守護進程,經過自身來管理相應的子進程,經過觀察相應的進程狀態就很明瞭了。
$ ps -ef | grep supervisord root 23306 1 0 07:30 ? 00:00:00 /usr/bin/python /usr/bin/supervisord -c /etc/supervisord.conf root 23331 23222 0 07:41 pts/0 00:00:00 grep supervisord $ ps -ef | grep simple_http_server root 23307 23306 0 07:30 ? 00:00:00 /home/golang/simple_http_server root 23333 23222 0 07:41 pts/0 00:00:00 grep simple_http_server
能夠很直觀的看出golang simple_http_server進程是supervisord的子進程。
控制命令基本都經過supervisorctl執行,輸入 help
能夠看到命令列表。這是一些經常使用命令:
supervisorctl status
supervisorctl stop spider
supervisorctl start spider
supervisorctl shutdown
echo "service supervisord start" >> /etc/rc.local
supervisor的誕生已經10年了,如今是3+版本,因此放心使用吧。
supervisor官網:http://supervisord.org/