文章插圖

文章插圖
Supervisor安裝與配置(linux/unix進程管理工具) Supervisor(http://supervisord.org)是用Python開發的一個client/server服務 , 是Linux/Unix系統下的一個進程管理工具 , 不支持Windows系統 。它可以很方便的監聽、啟動、停止、重啟一個或多個進程 。用Supervisor管理的進程 , 當一個進程意外被殺死 , supervisort監聽到進程死后 , 會自動將它重新拉起 , 很方便的做到進程自動恢復的功能 , 不再需要自己寫shell腳本來控制 。
因為Supervisor是Python開發的,安裝前先檢查一下系統否安裝了Python2.4以上版本 。下面以CentOS7.6,Python2.7.5版本環境下,介紹Supervisor的安裝與配置步聚:
實驗環境
系統平臺
cat /etc/redhat-releaseCentOS Linux release 7.6.1810 (Core)Python版本python -VPython 2.7.5yum 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-develwget https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tar.xztar xf Python-3.6.8.tar.xzcd Python-3.6.8./configure --prefix=/usr/local/python368make && make installecho 'export PATH=/usr/local/python368/bin:$PATH' >> /etc/profilesource /etc/profilepython3 -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.zipunzip setuptools-33.1.1.zipcd setuptools-33.1.1python setup.py installeasy_install supervisor2、pip 安裝 supervisor使用 pip 來安裝 , 前提要保證pip版本大于2.6
pip install supervisor3、yum epel-release 安裝 supervisoryum install -y epel-release && yum install -y supervisorsuperviso命令supervisor命令supervisor安裝完成后會生成三個執行程序:supervisortd、supervisorctl、echo_supervisord_conf:
?supervisortd:用于管理supervisor本身服務?supervisorctl:用于管理我們需要委托給superviso工具的服務?echo_supervisord_conf:用于生成superviso的配置文件?supervisor的守護進程服務(用于接收進程管理命令)?客戶端(用于和守護進程通信,發送管理進程的指令)
[[email protected] /]# which supervisord/bin/supervisord[[email protected] /]# which supervisorctl/bin/supervisorctl[[email protected] /]# which echo_supervisord_conf/bin/echo_supervisord_conf配置Supervisor通過運行echo_supervisord_conf程序生成supervisor的初始化配置文件
如果使用yum安裝則此步驟省略 , 直接進行修改配置文件步驟
mkdir /etc/supervisord.decho_supervisord_conf > /etc/supervisord.conf修改配置文件supervisor的配置文件內容有很多 , 不過好多都不需要修改就行使用 , 我這里只修改了以下兩項
#修改socket文件的mode , 默認是0700sed -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.gzyum install java-1.8.0-openjdk.x86_64 java-1.8.0-openjdk-devel.x86_64 -ytar xf 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#運行程序的命令autostart=true#是否在supervisord啟動后tomcat也啟動startsecs=10#啟動10秒后沒有異常退出 , 就表示進程正常啟動了 , 默認為1秒autorestart=true#程序退出后自動重啟,可選值:[unexpected,true,false] , 默認為unexpected , 表示進程意外殺死后才重啟;意思為如果不是supervisord來關閉的該進程則認為不正當關閉 , supervisord會再次把該進程給啟動起來 , 只能使用該supervisorctl來進行關閉、啟動、重啟操作 startretries=3#啟動失敗自動重試次數 , 默認是3user=root#用哪個用戶啟動進程 , 默認是rootpriority=999#進程啟動優先級 , 默認999 , 假如Supervisord需要管理多個進程 , 那么值小的優先啟動stopsignal=INTredirect_stderr=true#把stderr重定向到stdout標準輸出 , 默認falsestdout_logfile_maxbytes=200MB#stdout標準輸出日志文件大小 , 日志文件大小到200M后則進行切割 , 切割后的日志文件會標示為catalina.out1,catalina.out2,catalina.out3... , 默認50MBstdout_logfile_backups = 100#stdout標準輸出日志文件備份數 , 保存100個200MB的日志文件 , 超過100個后老的將被刪除 , 默認為10保存10個stdout_logfile=/usr/local/tomcat/logs/catalina.out#標準日志輸出位置 , 如果輸出位置不存在則會啟動失敗stopasgroup=false#默認為false,進程被殺死時 , 是否向這個進程組發送stop信號 , 包括子進程killasgroup=false#默認為false , 向進程組發送kill信號 , 包括子進程啟動進程 使用supervisord管理啟動后 , 當你使用/usr/local/tomcat/shutdown.sh或者kill $PID的時候 , supervisord都會認為是意外關閉 , 會自動再次把進程拉起 , 除非是使用supervisord命令關閉#supervisord啟動supervisord -c /etc/supervisord.conf#啟動supervisord進程 , 我們在配置文件中設置了 autostart=true 參數 , 在supervisord啟動的時候 tomcat也隨之啟動ps -ef|grep java 程序管理supervisorctl status tomcat#tomcat狀態supervisorctl stop tomcat#停止tomcatsupervisorctl start tomcat#啟動tomcatsupervisorctl restart tomcat#重啟tomcatsupervisorctl reoload tomcat#重仔tomcatRedis被Supervisor管理redis默認不在配置文件中添加 daemonize yes 參數則是前臺啟動的 , 所以也可以被我們的的Supervisor所管理 redis配置文件如下:
cat redis6001.confport 6001bind 192.168.31.230protected-mode yespidfile "/usr/local/redis/run/redis6001.pid"loglevel noticelogfile "/usr/local/redis/logs/redis6001.log"save 900 1stop-writes-on-bgsave-error yesrdbcompression yesrdbchecksumyesdbfilename dump.rdbdir "/usr/local/redis/data/rdb/"timeout 0tcp-keepalive 300編寫redis被Supervisor管理的案例vim /etc/supervisord.d/redis.conf[program:redis]directory=/usr/local/rediscommand=/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis6001.confautostart=truestartsecs=10autorestart=truestartretries=3user=rootpriority=999stopsignal=INTredirect_stderr=truestdout_logfile_maxbytes=200MBstdout_logfile_backups = 100stdout_logfile=/usr/local/redis/logs/redis6001.logstopasgroup=falsekillasgroup=false使用super啟動redis#關閉tomcatsupervisorctl stop tomcattomcat: stopped#殺掉supervisordps -ef|grep supervisordroot2692710 10:47 ?00:00:00 /usr/bin/python /bin/supervisord -c /etc/supervisord.confroot27549 274020 11:07 pts/200:00:00 grep --color=auto superkill -9 26927#重新啟動supervisord使其重新加載配置文件 , supervisord默認會把redis和tomcat都拉起來supervisord -c /etc/supervisord.conf程序管理supervisorctl status redis#redis狀態supervisorctl stop redis#停止redissupervisorctl start redis#啟動redissupervisorctl restart reids#重啟redissupervisorctl reoload redis#重載redis程序管理程序管理
supervisorctl status all#查看所有進程狀態supervisorctl stopall#停止所有進程supervisorctl startall#啟動所有進程supervisorctl restart all#重啟所有進程supervisorctl reoload all#重載所有進程Supervisord開啟啟動配置vim /usr/lib/systemd/system/supervisord.service[Unit]Description=Process Monitoring and Control DaemonAfter=rc-local.service nss-user-lookup.target[Service]Type=forkingExecStart=/usr/bin/supervisord -c /etc/supervisord.conf[Install]WantedBy=multi-user.target【linux批量部署工具 服務器批量管理工具超級vps管理器】systemctl enable supervisordsystemctl is-enabled supervisord
- linux怎么加載u盤 linux系統添加硬盤
- 抖店app怎么掃碼登錄 抖店怎么掃碼登錄
- 陳莉君 linux操作系統原理與應用張玲課后答案 Linux操作系統原理與應用電子版百度網盤
- 蘋果手機怎么批量刪除qq好友 怎么批量刪除QQ好友
- oracle配置環境變量 Linux oracle配置環境變量教程
- 蘋果手機怎么批量刪除短信阻止聯系人 蘋果手機怎么批量刪除短信和通訊錄
- cad2020批量打印怎么用 cad2019批量打印怎么用
- linux遠程登錄windows命令 linux遠程登錄命令ssh
- 域名批量查詢,域名查詢工具 域名批量查詢系統
- class文件記事本打開全亂碼了 linux查看class文件內容亂碼
