運維supervisord進程守護

環境Centos6+,Python2.7

如果Python環境不滿足2.7,請先升值至2.7版本(因老服務爲老版本的centos6系統,默認python環境爲2.6,經測試2.6環境使用supervisord報錯無法啓動)

一、Python環境升級安裝過程

  1. 先安裝相應的依賴
    yum -y install gcc openssl-devel bzip2-devel
    如果沒安裝好這些依賴的,後面還要重新走編譯流程,別問我爲什麼知道 。

  2. 下載軟件包
    cd /opt
    wget https://www.python.org/ftp/python/2.7.15/Python-2.7.15.tgz

  3. 解壓安裝包
    tar xvzf Python-2.7.15.tgz

  4. 安裝
    cd Python-2.7.15
    ./configure --enable-optimizations
    make && make altinstall
    在檢測腳本中加上enable-optimizations優化,主要是在這個版本上能啓用PGO優化,讓Python在運行時能變得更快,詳細參考[2]。make 加altinstall參數,避免覆蓋原來安裝在/usr/bin/python 的版本。

  5. 查看安裝是否成功
    /usr/local/bin/python2.7 -V
    –>
    Python 2.7.15

  6. 建立軟連接,使系統默認python指向2.7版本
    mv /usr/bin/python /usr/bin/python2.6.6
    ln -s /usr/local/bin/python2.7 /usr/bin/python

  7. 解決yum不支持python2.7的問題
    sed -i ‘s/python/python2.6.6/’ /usr/bin/yum
    或者直接用vi編輯/usr/bin/yum把頭部的python換成2.6.6。ps:編輯前記得備份。

  8. 安裝pip
    因爲2.7.15版本已經內建了ensurepip模塊,所以直接運行下面的命令去安裝pip即可

python -m ensurepip
mv /usr/bin/pip /usr/bin/pip2.6.6
ln -s /usr/local/bin/pip /usr/bin/pip
ps:因爲前面把默認Python版本換成了2.7.15,所以就沒有指定全路徑了,沒換的需要確保用2.7的去安裝。

輸出:

Collecting setuptools
Collecting pip
Installing collected packages: setuptools, pip
Successfully installed pip-9.0.3 setuptools-39.0.1
查看一下:

pip -V
–>pip 9.0.3 from /usr/local/lib/python2.7/site-packages (python 2.7)

二、supervisord安裝及配置

pip install supervisor
supervisord --help #查看是否安裝成功該命令
mkdir /etc/supervisor
mkdir /etc/supervisord.d
echo_supervisord_conf > /etc/supervisor/supervisord.conf #創建配置文件

下面我們來淺談一下配置文件的內容:
從上至下,依次包括如下Section:

unix_http_server,其中,file指定了socket file的位置。
inet_http_server,用於啓動一個含有前端的服務,可以從Web頁面中管理服務。其中,port用於設置訪問地址,username和password用於設置授權認證。
supervisord是對管理服務本身的配置。包含日誌文件相關、進程文件、啓動方式等等。
rpcinterface:supervisor中包含了rpc相關的接口。
supervisorctl是對supervisorctl服務相關的配置。
program是真正配置需要管理的任務。
eventlistener是對事件進行的管理。
group可以實現對任務組的管理。
include中可以引用其他的配置文件。

需要修改的內容爲最尾部的include,其餘均保持默認即可
vim /etc/supervisor/supervisord.conf

[include]
files = /etc/supervisord.d/*.ini

以127服務器的stafserver爲例,創建該程序的守護進行配置文件

vim /etc/supervisord.d/stafserver6666.ini

[program:stafserver6666]
autostart = true ; 在supervisord啓動的時候也自動啓動
directory = /data/stafserver
command = /usr/java/jdk1.8.0_171/bin/java -jar -Xms256m -Xmx512m -XX:+HeapDumpOnOutOfMemoryError staf-0.0.1.jar --server.port=6666
startsecs=10 ; 啓動10秒後沒有異常退出,就表示進程正常啓動了,默認爲1秒
user=root
stdout_logfile=/data/stafserver/svlog/stdout6666.log
stderr_logfile=/data/stafserver/svlog/stderr6666.log ;該項可以不要
stopasgroup = true ;默認爲false,進程被殺死時,是否向這個進程組發送stop信號,包括子進程
autorestart = true ; 程序退出後自動重啓,可選值:[unexpected,true,false],默認爲unexpected,表示進程意外殺死後才重啓
redirect_stderr = true ; 把stderr重定向到stdout,默認false

保存

啓動Supervisor服務

supervisord -c /etc/supervisor/supervisord.conf

服務管理
除了使用supervisord進行服務啓動外,針對單獨的服務,我們還可以使用supervisorctl進行服務管理。
例如:

啓動指定的服務
supervisorctl start stafserver6666
停止指定的服務
supervisorctl stop stafserver6666
更新配置文件變化並重啓變化的服務
supervisorctl update

三、添加supervisord爲系統自啓動服務

1、centos6

echo “/usr/bin/supervisord -c /etc/supervisor/supervisord.conf” >> /etc/rc.local

2、centos7

vim /usr/lib/systemd/system/supervisord.service

supervisord service for systemd (CentOS 7.0+)

by ET-CS (https://github.com/ET-CS)

[Unit]
Description=Supervisor daemon

[Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf
ExecStop=/usr/bin/supervisorctl shutdown
ExecReload=/usr/bin/supervisorctl reload
KillMode=process
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.targe
保存後執行systemctl daemon-reload
再執行systemctl enable supervisord.service即可

本文中版權歸獨秀天狼團隊所有,轉載請標註清楚。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章