天天看點

Linux程序監控工具:Supervisor

前言

我們知道現在的APP背景服務,必須可靠的運作,我們希望如果SOA服務程序挂了,可以迅速重新開機,那麼就需要程序的監控了,而在Linux下Supervisor是管理程序的利器。Supervisor就是用Python開發的一套通用的程序管理程式,能将一個普通的指令行程序變為背景daemon,并監控程序狀态,異常退出時能自動重新開機。想一想,其實不僅僅是在SOA服務上可以進行監控,還可以對Nginx等提供服務的任何程序進行監控和管理。

安裝Supervisor

如果采用離線安裝的方式,涉及到諸多前置軟體包的安裝,而且還需要相應版本,比如Python2.7。如果python的版本比較低,還需要更新,并且最好采用連結的方式改動,而不是完全解除安裝低版本。

部落客已經實踐成功,如下:【忽略jdk以及git】

<a href="http://s1.51cto.com/wyfs02/M01/84/41/wKiom1eKIs2w1nuJAAAsK9bcxfc346.png" target="_blank"></a>

相應軟體包直接利用python setup.py install進行安裝即可。

注意,Supervisor被安裝到了哪裡?如果沒有明确指定,其實是被安裝到了python目錄下,因為說白了就是python的一個子產品而已,如下圖所示:

<a href="http://s4.51cto.com/wyfs02/M01/84/41/wKiom1eKI8nyaWYAAAB0mp7ro-0908.png" target="_blank"></a>

在這裡,我們看到了supervisord,supervisord指令,其實這就是在公司常用的2個基礎指令。

安裝完畢後,利用echo_supervisord_conf指令生成預設的基礎配置,在/etc下存在supervisord.conf.

我們可以大概掃一眼,典型的分段式配置:

<a href="http://s5.51cto.com/wyfs02/M01/84/41/wKiom1eKJQHwXQYyAABrpooed2o473.png" target="_blank"></a>

實際上,一般在公司,我們是涉及到非常多的項目會利用到Supervisor,我們并不會将所有的配置寫到一個檔案裡面,而是根據業務各自提供各自的配置,然後include即可。可以看個例子:

<a href="http://s5.51cto.com/wyfs02/M00/84/41/wKiom1eKJaWjqOG6AAAGSEsd-T4308.png" target="_blank"></a>

監控實踐

第一,提供配置檔案

我們可以在/supervisor/etc/test.conf中提供以下内容:

<a href="http://s1.51cto.com/wyfs02/M01/84/41/wKioL1eKJmiC4pehAAAWVdiN68w273.png" target="_blank"></a>

既然要交給Supervisor進行管理,那麼自然要告訴她,你的腳本路徑在哪裡,是否随着Supervisor啟動而啟動,輸出的日志路徑在哪裡等一些基本資訊。

除此之外,Supervisor還可以一次性幫你啟動多個程序,比如一台機器上啟動多個SOA服務執行個體,統一進行管理。

上面的配置就是在告訴Supervisor啟動3個程序執行個體,而這每一個執行個體的名稱就是process_name。其中program_name其實就是helloworld。

第二,啟動Supervisord服務

<a href="http://s1.51cto.com/wyfs02/M02/84/41/wKiom1eKKAPQM5mlAAAJ3UNz0YY364.png" target="_blank"></a>

告訴配置檔案在哪裡,然後利用supervisord啟動即可,如果不提供配置檔案路徑,那麼将按照預設的路徑逐級查找。

我們可以利用ps來檢視下,發生了什麼?

<a href="http://s2.51cto.com/wyfs02/M01/84/41/wKioL1eKKPDjnbTRAABEzrK1yFw701.png" target="_blank"></a>

這裡,我們清楚的看到了,Supervisord的服務程序,以及她為我們啟動的3個執行個體程序。

我們再來看看/myshell/supervisor4test.sh的内容是什麼?

<a href="http://s1.51cto.com/wyfs02/M00/84/41/wKioL1eKKcqCc1DOAAASG_O3S2Y035.png" target="_blank"></a>

我們來看看日志的輸出:

<a href="http://s2.51cto.com/wyfs02/M02/84/41/wKioL1eKKjmTI_pFAAANjXpIsM8454.png" target="_blank"></a>

我們清楚的看到了,有3個程序同時在輸出,驗證了上面我們所提及的。

我們可以kill -9的方式挂掉這3個程序中的幾個,你會發現,馬上Supervisor将替我們重新開機!

第三:利用supervisorctl進行程序管理

<a href="http://s1.51cto.com/wyfs02/M02/84/41/wKiom1eKKt2zBBsoAABbRbzDWlA662.png" target="_blank"></a>

到這裡,Supervisor的初步使用就介紹完畢了,下文貼出一些基本配置說明,供大家參考。

<a href="http://s2.51cto.com/wyfs02/M00/84/41/wKiom1eKK-Djhf6nAABQMBGDrss826.png" target="_blank"></a>

本文轉自zfz_linux_boy 51CTO部落格,原文連結:http://blog.51cto.com/zhangfengzhe/1827020,如需轉載請自行聯系原作者