运维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即可

本文中版权归独秀天狼团队所有,转载请标注清楚。

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