Supervisor離線安裝及使用


Supervisor是用Python開發的一套通用的進程管理程序,能將一個普通的命令行進程變為后台daemon,並監控進程狀態,異常退出時能自動重啟。它是通過fork/exec的方式把這些被管理的進程當作supervisor的子進程來啟動,這樣只要在supervisor的配置文件中,把要管理的進程的可執行文件的路徑寫進去即可。也實現當子進程掛掉的時候,父進程可以准確獲取子進程掛掉的信息的,可以選擇是否自己啟動和報警

supervisor的安裝有多種方式
配置好yum源后,可以直接安裝

yum install supervisor

Debian/Ubuntu可通過apt安裝

apt-get install supervisor

pip安裝

pip install supervisor

easy_install安裝

easy_install 

這幾種安裝方式都需要在線聯網。但大部分的生產環境都是離線環境,是封閉的網絡沒有辦法在線安裝。

這里整理了Supervisor的離線安裝包和安裝腳本,可以進行離線安裝並能指定安裝目錄。

一、整理Supervisor安裝需要的工具和依賴包

包括有:
setuptools
elementtree
meld3
supervisor

二、編寫離線安裝腳本

整體思路:依次解壓並安裝Supervisor所需要的工具和依賴包,將Supervisor的配置文件的默認安裝目錄路徑替換成制定的目錄路徑

vi install_supervisor.sh
#!/usr/bin/env bash
function Install_Supervisor()
{
    #Install supervisord
    tar -zxvf setuptools-24.0.2.tar.gz 2>&1 >/dev/null
    cd setuptools-24.0.2/
    python setup.py install >/dev/null 2>&1
    cd ..
    easy_install elementtree-1.2.7-20070827-preview.zip >/dev/null 2>&1
    easy_install meld3-0.6.5.tar.gz 2>/dev/null 2>&1
    easy_install supervisor-3.3.0.tar.gz >/dev/null 2>&1
    mkdir -p ${INSTALL_DIR}/etc/
    mkdir -p ${INSTALL_DIR}/tmp/
    mkdir -p ${INSTALL_DIR}/logs/
    cp etc/supervisord.conf ${INSTALL_DIR}/etc/
    sed -i "s#__install_dir__#${INSTALL_DIR}#g" ${INSTALL_DIR}/etc/supervisord.conf
    sed -i "s#__user__#${USER}#g" ${INSTALL_DIR}/etc/supervisord.conf
    ln -s /usr/bin/supervisorctl ${INSTALL_DIR}/commandctl
    cp run_supervisor.sh ${INSTALL_DIR}/
    sed -i "s#__install_dir__#${INSTALL_DIR}#g" ${INSTALL_DIR}/run_supervisor.sh
    chmod +x ${INSTALL_DIR}/run_supervisor.sh
}

USER='root'
if [ ! -n "$1" ]; then
   INSTALL_DIR='/app/supervisor'
else
   INSTALL_DIR=$1
fi
Install_Supervisor

安裝腳本中默認的安裝路徑是/app/supervisor,可以根據實際情況進行調整。

另外整理了一個run_supervisor.sh的腳本,在安裝以后根據安裝目錄來生成這個啟動腳本。

#!/usr/bin/env bash
cd __install_dir__
if [ ! -d "tmp" ];then
  mkdir tmp
else
  echo "tmp文件夾已經存在"
fi
if [ ! -d "logs" ];then
  mkdir logs
else
  echo "logs文件夾已經存在"
fi
/usr/bin/supervisord -c __install_dir__/etc/supervisord.conf
echo "supervisord 已執行。"

三、將所有的安裝包腳本等打成離線安裝包

tar -czvf  supervisor_install_pack.tar.gz  supervisor 

已打好的離線安裝包下載 https://545c.com/file/21165215-443895501
城通網盤下載 https://545c.com/file/21165215-443895501
CSDN下載 https://download.csdn.net/download/fullbug/12434225

四、離線安裝包使用

下載離線安包,解壓

tar -zxvf supervisor_install_pack.tar.gz

解壓后看到supervisor的目錄,在supervisor的目錄中找到install_supervisor.sh的腳本
supervisor離線包安裝目錄
執行install_supervisor.sh的腳本,默認安裝/app/supervisor下,可以帶參數指定安裝目錄。也可以修改install_supervisor.sh腳本自定義默認的安裝路徑。
執行完安裝腳本,就可以在/app/supervisor目錄下看到有相應的啟動腳本、配置文件目錄、日志目錄及臨時文件目錄。
supervisor運行目錄
執行run_supervisor.sh就可以啟動supervisor

./run_supervisor.sh

五、驗證和使用supervisor

ps -ef|grep supervisor 查看supervisor是否已經啟動
查看supervisor是否已經啟動
通過web界面的9001看web界面控制台http://127.0.0.1:9001
web界面控制台

  • supervisord
    運行 Supervisor 時會啟動一個進程 supervisord,它負責啟動所管理的進程,並將所管理的進程作為自己的子進程來啟動,而且可以在所管理的進程出現崩潰時自動重啟。
    supervisord -v 查看supervisor版本號
  • supervisorctl
    是命令行管理工具,可以用來執行 stop、start、restart 等命令,來對這些子進程進行管理。
    supervisor是所有進程的父進程,管理着啟動的子進展,supervisor以子進程的PID來管理子進程,當子進程異常退出時supervisor可以收到相應的信號量。

supervisor常用管理命令
supervisorctl restart < application name> ;重啟指定應用
supervisorctl stop < application name> ;停止指定應用
supervisorctl start < application name> ;啟動指定應用
supervisorctl restart all ;重啟所有應用
supervisorctl stop all ;停止所有應用
supervisorctl start all ;啟動所有應用

六、配置文件說明

supervisor.conf配置文件

[unix_http_server]
file=/tmp/supervisor.sock   ;UNIX socket 文件,supervisorctl 會使用
;chmod=0700                 ;socket文件的mode,默認是0700
;chown=nobody:nogroup       ;socket文件的owner,格式:uid:gid
 
;[inet_http_server]         ;HTTP服務器,提供web管理界面
;port=127.0.0.1:9001        ;Web管理后台運行的IP和端口,如果開放到公網,需要注意安全性
;username=user              ;登錄管理后台的用戶名
;password=123               ;登錄管理后台的密碼
 
[supervisord]
logfile=/tmp/supervisord.log ;日志文件,默認是 $CWD/supervisord.log
logfile_maxbytes=50MB        ;日志文件大小,超出會rotate,默認 50MB,如果設成0,表示不限制大小
logfile_backups=10           ;日志文件保留備份數量默認10,設為0表示不備份
loglevel=info                ;日志級別,默認info,其它: debug,warn,trace
pidfile=/tmp/supervisord.pid ;pid 文件
nodaemon=false               ;是否在前台啟動,默認是false,即以 daemon 的方式啟動
minfds=1024                  ;可以打開的文件描述符的最小值,默認 1024。注意托管ES進程,這里要進行調整至65535
minprocs=200                 ;可以打開的進程數的最小值,默認 200。注意托管ES進程,這里要進行調整至4096
 
[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ;通過UNIX socket連接supervisord,路徑與unix_http_server部分的file一致
;serverurl=http://127.0.0.1:9001 ; 通過HTTP的方式連接supervisord
 
; [program:xx]是被管理的進程配置參數,xx是進程的名稱
[program:xx]
command=/opt/apache-tomcat-8.0.35/bin/catalina.sh run  ; 程序啟動命令
autostart=true       ; 在supervisord啟動的時候也自動啟動
startsecs=10         ; 啟動10秒后沒有異常退出,就表示進程正常啟動了,默認為1秒
autorestart=true     ; 程序退出后自動重啟,可選值:[unexpected,true,false],默認為unexpected,表示進程意外殺死后才重啟
startretries=3       ; 啟動失敗自動重試次數,默認是3
user=tomcat          ; 用哪個用戶啟動進程,默認是root
priority=999         ; 進程啟動優先級,默認999,值小的優先啟動
redirect_stderr=true ; 把stderr重定向到stdout,默認false
stdout_logfile_maxbytes=20MB  ; stdout 日志文件大小,默認50MB
stdout_logfile_backups = 20   ; stdout 日志文件備份數,默認是10
; stdout 日志文件,需要注意當指定目錄不存在時無法正常啟動,所以需要手動創建目錄(supervisord 會自動創建日志文件)
stdout_logfile=/opt/apache-tomcat-8.0.35/logs/catalina.out
stopasgroup=false     ;默認為false,進程被殺死時,是否向這個進程組發送stop信號,包括子進程
killasgroup=false     ;默認為false,向進程組發送kill信號,包括子進程
 
;包含其它配置文件
[include]
files = supervisord.d/*.ini    ;默認放在安裝目錄的supervisord.d目錄下,可以指定一個或多個以.ini結束的配置文件。

子進程配置文件

需要給托管的子進程配置相應的配置文件,每個進程的配置文件都可以單獨分拆也可以把相關的腳本放一起。目錄及文件后綴可以在
supervisor.conf配置文件中進行自定義。見supervisor.conf的

[include]
files = supervisord.d/*.ini  #目錄路徑及文件后綴名都可以自定義。

logstash.ini 樣例說明:

#項目名
[program:logstash-test]
#腳本目錄
directory=/app/elk/logstash-7.6.0
#腳本執行命令
command=/app/elk/logstash-7.6.0/bin/logstash -f /app/elk/logstash-7.6.0/bin/test-pipeline.conf
#進程數
numprocs=1
#supervisor啟動的時候是否隨着同時啟動,默認True
autostart=true
#當程序exit的時候,這個program不會自動重啟,默認unexpected,設置子進程掛掉后自動重啟的情況,有三個選項,false,unexpected和true。如果為false的時候,無論什么情況下,都不會被重新啟動,如果為unexpected,只有當進程的退出碼不在下面的exitcodes里面定義的
autorestart=false
#這個選項是子進程啟動多少秒之后,此時狀態如果是running,則我們認為啟動成功了。默認值為1
startsecs=1
#腳本運行的用戶身份 
user = root
#把stderr重定向到stdout,默認 false
redirect_stderr = true
#stdout日志文件大小,默認 50MB
stdout_logfile_maxbytes = 10M
#stdout日志文件備份數
stdout_logfile_backups = 10
#日志輸出 
stderr_logfile=/app/elk/logstash-7.6.0/logs/logstash_test_error.log
stdout_logfile=/app/elk/logstash-7.6.0/logs/logstash_test_out.log


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM