Supervise进程管理工具
文章目录
1 引言
Supervise是一个进程管理工具,使用场景:将服务用supervise启动,当业务进程挂掉后,迅速拉取业务进程。
实际上supervise是开源工具集daemontools( http://cr.yp.to/daemontools.html )其中的一个工具,公司内很多服务都用了这个工具,为了方便结合公司的报警接口。
2 编译安装
编译安装比较简单,工具开源地址
wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
tar -xvf daemontools-0.76.tar.gz
cd admin/daemontools-0.76
vim src/conf-cc
gcc -O2 -Wimplicit -Wunused -Wcomment -Wchar-subscripts -Wuninitialized -Wshadow -Wcast-qual -Wcast-align -Wwrite-strings -include /usr/include/errno.h
package/install
编译完成后有一系列的工具,其中supervise就是最常用的一个
3 举例
新建test目录,并在test目录新建edate.sh、run文件,文件内容如下:
# edate.sh
#! /bin/bash
echo `date +"%Y-%m-%d %H:%M:%S"`
sleep 5
#run
#! /bin/sh
echo "start test /home/work/software/admin/test/edate.sh"
sh /home/work/software/admin/test/edate.sh
目录结构如下:
用supervise启动:nohup /home/work/software/admin/daemontools-0.76/command/supervise ./test 2>&1 >> test.log &
查看日志文件:tail -f test.log
4 工作原理
模块的工作原理实际上很简单,supervise启动的时候fork一个子进程,子进程执行execvp系统调用,将自己替换成执行的模块,模块变成supervise的子进程在运行,而supervise则死循环运行,并通过waitpid或者wait3系统调用选择非阻塞的方式去侦听子进程的运行情况,当然同时也会读取pipe文件svcontrol的命令,然后根据命令去执行不同的动作,如果子进程因某种原因导致退出,则supervise通过waitpid或者wait3获知,并继续启动模块,如果模块异常导致无法启动,则会使supervise陷入死循环,不断的启动模块。
查看supervise.c源码:
https://github.com/daemontools/daemontools/blob/master/src/supervise.c
5 Python版本(supervisor)
该工具很受欢迎,但由于是C写的,使用和改造都比较麻烦,各种语言都有相应的版本,Python版本最突出。
安装简单、使用方便,在github.com很受欢迎。
supervisor
有以下两个部分组成:
supervisord
: supervisor的服务器端部分,启动supervisor就是运行这个命令
supervisorctl
: 启动supervisor的命令行窗口
详细介绍参见官网
# 1.安装
pip install supervisor
# 2.配置
vim /etc/supervisor/conf.d/demo.conf
[program:demo] #项目名称为demo
command=python main.py #运行脚本
stderr_logfile=/var/log/supervisor/error_demo.log #错误日志
stdout_logfile=/var/log/supervisor/demo.log #输出
directory=/root/demo/ #项目路径
autostart=true #当supervisor 启动时会自动启动
user=root #用户
autorestart=true #自动重启
# 3.常用操作
supervisorctl status //查看所有进程的状态
supervisorctl stop es //停止es
supervisorctl start es //启动es
supervisorctl restart //重启es
supervisorctl update //配置文件修改后使用该命令加载新的配置
supervisorctl reload //重新启动配置中的所有程序
参考
文章作者 Brook
上次更新 2020-07-26