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
接著,我們得寫自己的程序配置檔案了
程序配置檔案的路徑,上面已經說了,我這裡在/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 groupworker
和 stop 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/