- 系統平台
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