1. 程式人生 > >supervisor快速上手使用教程

supervisor快速上手使用教程

因為樹莓派的遠端監控已經布好了,我現在面臨一個問題,就是frp有可能會因為意外的一些情況被殺掉。如果我正在使用的時候,客戶端的被殺掉了。我就沒發連上,只能等到下班之後。這個是很坑的一件事情。因為公司的專案已經在用supervisor這個工具,所以我決定用這個工具來幫我管理程序。supervisor是用python開發的。可以很好的管理程序。如果程序被殺掉了,或者意外情況斷開了,supervisor會重新幫我們把程序開啟。廢話不多說,這裡切入正題。

安裝

伺服器在阿里雲上,centos的系統,先解決安裝問題:

yum install python-setuptools
easy_install supervisor
或者使用
wget --no-check-certificate https://bootstrap.pypa.io/ez_setup.py -O - | sudo python
easy_install supervisor

同樣也是兩條命令。

使用

首先,使用root身份建立一個全域性配置檔案(supervisord.conf)

echo_supervisord_conf > /etc/supervisord.conf
supervisord -c /etc/supervisord.conf  #這一步已經完成supervisord的啟動。

需要說明的是,這兩行命令一旦敲定,你就不能再移動supervisord.conf這個檔案了。
因為如果你再移動這個檔案,啟動必須得指定路徑。同時,你也無法再直接使用supervisorctl這個命令了。
然後我們可以開啟supervisord.conf來看一下:
基本上都不需要修改。裡面有一個[unix_http_server]

,這個裡面可以配置執行使用者,執行組,使用者名稱,密碼。可以不動。
[supervisord]裡面存放的是管理所有程序的日誌輸出的地方。舉個例子。我的服務自己會產生一堆的日誌,這個日誌是我自己管理的。而[supervisord]是管理類似我這樣很多服務在啟動,更新時產生的日誌。不是同一個日誌。
這裡關於檔案帶下,檔案備份數量,日誌級別等都可以根據實際情況做修改。當然,如果你要啟用服務的話,你得把這行命令前面的分號給去掉,分號應該是註釋的意思。
然後就可以拉到最後,有一個[include]的檔案。這個路徑就比較重要了。這個路徑就是你後面配置的程序檔案。這裡我會預設改成supervisord.d/*.conf
這樣的話,就可以在/etc/supervisord.d
下,建立我們自己的程序配置。supervisord啟動的時候,就會去啟動我們自己的程序配置。

接著,我們得寫自己的程序配置檔案了

程序配置檔案的路徑,上面已經說了,我這裡在/etc/supervisord.d下,切到這個目錄下,建立一個frphome.conf, 這個程序是連到家裡的樹莓派的。

vim frphome.conf

然後編輯如下內容:

[program:frphome]
command=/home/guo/frp_0.21.0_linux_amd64/frps -c /home/guo/frp_0.21.0_linux_amd64/frps.ini
user=root
autostart=true
autorestart=true
startsecs=3
stdout_logfile=/home/guo/frp/rbhome.log

首先要說的是,supervisor不但可以管理python程序,還可以管理shell相關的程序。但是,我之前用了個cd 切到目錄下,就出問題了。所以這裡我把路徑給寫死了,就可以正常執行。
下面簡單解釋一下命令:
command就是要執行的命令。user就是用root許可權來執行。autostart 是自動啟動。 autorestart 就是如果掛了的話,會自動啟動三次。 startsecs是子程序啟動3秒後,如果狀態為run,意為啟動了。
stdout_logfile就是我當前這個程序執行的時候產生的日誌輸出了。

啟動

到這裡的時候,我們就可以進supervisor了,如果上面提到的supervisord.conf的位置,你沒有修改它,你就可以直接supervisorctl啟動了,否則的話,你得這樣:

sudo supervisorctl -c /etc/supervisor/supervisord.conf

這裡,/etc/supervisor/supervisord.conf就是你supervisord.conf的路徑。這裡根據實際情況進行修改。

執行完之後,就進入程序的一個管理命令行了。
可以通過執行
status檢視一下執行狀態。
start來啟動一個程序。
restart來重啟一個程序
stop來停止一個程序
stop還有兩個用法,stop groupworkerstop all
stop groupworker,是停止所有屬於名為groupworker這個分組的程序。
reload——我個人覺得這個一個很危險的命令,因為它會把你已經執行的程序進行重啟。
如果你剛剛加了一個新配置進來,還有bug的話,就會導致所有的程序都掛掉!!!(之前的慘痛經歷)
當然,如果用的話,最好還是用update.
update——這個配置沒有修改的是不會重啟的,如果你的程式碼修改了,可以單獨restart 一個程序。如果是程序組的話,也最好是一個一個啟動。防止都掛了。

看到這裡已經算入門了,更多配置,請參考官方文件

參考:

https://feilong.me/2011/03/monitor-processes-with-supervisord
https://www.restran.net/2015/10/04/supervisord-tutorial/
https://blog.csdn.net/xyang81/article/details/51555473
https://www.jianshu.com/p/2008cf9f7ee7
https://stackoverflow.com/questions/18859063/supervisor-socket-error-issue
http://liyangliang.me/posts/2015/06/using-supervisor/