天天看點

安裝 Supervisor

  • 系統平台
cat /etc/redhat-releaseCentOS
Linux release 7.6.1810 (Core)
           

Python版本

python -V
Python 2.7.5
           

如果python版本低于2.6請更新,下面貼出一個安裝python3.6.8的安裝示例

yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel -y libffi-devel
           
wget https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tar.xz
tar xf Python-3.6.8.tar.xz
cd Python-3.6.8
./configure --prefix=/usr/local/python368
make
make install
echo 'export PATH=/usr/local/python368/bin:$PATH' >> /etc/profile
source /etc/profile
python3 -V
           

安裝 Supervisor

安裝 Supervisor的方法很多,以下介紹三種,我這裡所采用的為第三種

1、easy_install 安裝 supervisor

安裝Python包管理工具(easy_install) easy_install是setuptools包裡帶的一個指令,使用easy_install實際上是在調用setuptools來完成安裝子產品的工作,是以安裝setuptools即可:

wget https://pypi.io/packages/source/s/setuptools/setuptools-33.1.1.zip
unzip setuptools-33.1.1.zipcd setuptools-33.1.1
python setup.py install
easy_install supervisor
           

2、pip 安裝 supervisor

使用 pip 來安裝,前提要保證pip版本大于2.6

pip install supervisor
           

3、yum epel-release 安裝 supervisor

yum install -y epel-release && yum install -y supervisor
           

superviso指令

supervisor安裝完成後會生成三個執行程式:supervisortd、supervisorctl、echo_supervisord_conf:

  • supervisortd:用于管理supervisor本身服務
  • supervisorctl:用于管理我們需要委托給superviso工具的服務
  • echo_supervisord_conf:用于生成superviso的配置檔案
  • supervisor的守護程序服務(用于接收程序管理指令)
  • 用戶端(用于和守護程序通信,發送管理程序的指令)
which supervisord
/bin/supervisord
which supervisorctl
/bin/supervisorctl
which echo_supervisord_conf
/bin/echo_supervisord_conf
           

配置Supervisor

通過運作echo_supervisord_conf程式生成supervisor的初始化配置檔案

如果使用yum安裝則此步驟省略,直接進行修改配置檔案步驟

mkdir /etc/supervisord.d
echo_supervisord_conf > /etc/supervisord.conf
           

修改配置檔案

supervisor的配置檔案内容有很多,不過好多都不需要修改就行使用,我這裡隻修改了以下兩項

#修改socket檔案的mode,預設是0700
sed -i 's/;chmod=0700/chmod=0766/g' /etc/supervisord.conf   
#在配置檔案最後添加以下兩行内容來包含/etc/supervisord目錄
sed -i '$a [include] \
files = /etc/supervisord.d/*.conf' /etc/supervisord.conf
           

編寫需要被Supervisor管理的程序

Supervisor隻能管理非dameon程序,像預設的redis為前台運作、Tomcat其實是 startup.sh shutdown.sh來調用catalina.sh進行背景運作的,預設catalina.sh為前台運作的程式,不能管理像Nginx一樣的非dameon程序

Tomcat被Supervisor管理

Tomcat安裝如下:

wget http://us.mirrors.quenda.co/apache/tomcat/tomcat-8/v8.5.47/bin/apache-tomcat-8.5.47.tar.gz
yum install -y java-1.8.0-openjdk.x86_64 java-1.8.0-openjdk-devel.x86_64 
tar zxvf apache-tomcat-8.5.47.tar.gz  -C /usr/local/
mv /usr/local/apache-tomcat-8.5.47 /usr/local/tomcat
           

想要我們的應用被Supervisor管理,就需要在/etc/supervisord目錄下編寫配置檔案,Tomcat案例如下:

vim /etc/supervisord.d/tomcat.conf
           
#程式唯一名稱
[program:tomcat]
#程式路徑
directory=/usr/local/tomcat
#運作程式的指令
command=/usr/local/tomcat/bin/catalina.sh run
 #是否在supervisord啟動後tomcat也啟動
autostart=true
#啟動10秒後沒有異常退出,就表示程序正常啟動了,預設為1秒
startsecs=10
#程式退出後自動重新開機,可選值:[unexpected,true,false],預設為unexpected,表示程序意外殺死後才重新開機;意思為如果不是supervisord來關閉的該程序則認為不正當關閉,supervisord會再次把該程序給啟動起來,隻能使用該supervisorctl來進行關閉、啟動、重新開機操作 
autorestart=true
#啟動失敗自動重試次數,預設是3
startretries=3
#用哪個使用者啟動程序,預設是root
user=root
#程序啟動優先級,預設999,假如Supervisord需要管理多個程序,那麼值小的優先啟動
priority=999
#程序停止信号,可以為TERM, HUP, INT, QUIT, KILL, USR1, or USR2等信号預設為TERM,當用設定的信号去幹掉程序,退出碼會被認為是expected
stopsignal=INT
#把stderr重定向到stdout标準輸出,預設false
redirect_stderr=true
#stdout标準輸出日志檔案大小,日志檔案大小到200M後則進行切割,切割後的日志檔案會标示為catalina.out1,catalina.out2,catalina.out3...,預設50MB
stdout_logfile_maxbytes=200MB
#stdout标準輸出日志檔案備份數,儲存100個200MB的日志檔案,超過100個後老的将被删除,預設為10儲存10個
stdout_logfile_backups = 100
#标準日志輸出位置,如果輸出位置不存在則會啟動失敗
stdout_logfile=/usr/local/tomcat/logs/catalina.out
#預設為false,程序被殺死時,是否向這個程序組發送stop信号,包括子程序
stopasgroup=false
#預設為false,向程序組發送kill信号,包括子程序
killasgroup=false
           

啟動程序 使用supervisord管理啟動後,當你使用/usr/local/tomcat/shutdown.sh或者kill $PID的時候,supervisord都會認為是意外關閉,會自動再次把程序拉起,除非是使用supervisord指令關閉

#supervisord啟動
 supervisord -c /etc/supervisord.conf                    
 #啟動supervisord程序
 #我們在配置檔案中設定了 autostart=true 參數,在supervisord啟動的時候 tomcat也随之啟動
 #檢視tomcat是否啟動
 ps -ef |grep java                                         
           

程式管理

#tomcat狀态
supervisorctl status tomcat
#停止tomcat
supervisorctl stop tomcat
#啟動tomcat
supervisorctl start tomcat
#重新開機tomcat
supervisorctl restart tomcat
#重載tomcat
supervisorctl reoload tomcat
           

繼續閱讀