021_supervise进行管理利器

一、公司的类似ansible的工具也是用supervise管理的

[admin@mjyall-test-1 /service/ansible-oc-agent]$ ps -ef|grep 19070
root     19070 19068  0 00:44 ?        00:00:00 svscan /service
root     19072 19070  0 00:44 ?        00:00:00 supervise ansible-oc-agent
root     19073 19070  0 00:44 ?        00:00:00 supervise log
[admin@mjyall-test-1 /service/ansible-oc-agent]$ sudo tree .
.
├── log
│   ├── run
│   └── supervise
│       ├── control
│       ├── lock
│       ├── ok
│       └── status
├── run
└── supervise
    ├── control
    ├── lock
    ├── ok
    └── status

3 directories, 10 files
[admin@mjyall-test-1 /service/ansible-oc-agent]$ cat run
#!/bin/bash

. /etc/profile

mkdir -p /opt/ansible-oc-agent/cache
cd /opt/eoc-agent

exec 2>&1
exec /opt/ansible-oc-agent/bin/startup.sh

二、学习下别人的文章

Reference:https://blog.csdn.net/u012373815/article/details/70217030

Daemontools是一个包含了很多管理Unix服务的工具的软件包。其中最核心的工具是supervise,它的功能是监控一个指定的服务,当该服务进程消亡,则重新启动该进程。

而要添加让supervise监控的服务非常容易,只需要添加一个被监控的服务的目录,在该目录中添加启动服务器的名字为run的脚本文件即可。

supervisor是所有项目的父进程:

supervisor(pid=29208)会成为主进程,管理各个项目的进程。

当项目A(pid=11531)挂掉,supervisor根据设置autorestart、startretries是否重启。

若要重启,则会重启项目A(pid=13357),

若不重启,则项目A(pid=0)。

当supervisor被kill,管理的项目全部死掉,重启supervisor(pid=14140),管理的项目都重启;

应用

在此处我使用supervisor 管理 flume 的agent,当agent 挂掉之后自动重启。

supervise安装

  1. 获取supervise 安装包: 
    点我下载:daemontools-0.76.tar.gz
  2. 新建文件夹supervise
  3. 下载daemontools-0.76.tar.gz 到 supervise 目录下 
    解压daemontools-0.76.tar.gz
# tar -zxvf daemontools-0.76.tar.gz 
# cd admin/daemontools-0.76 

这里写图片描述

4.编辑conf-cc,在conf-cc 最后加上

 vi src/conf-cc
 -include /usr/include/errno.h 

如图所示 
这里写图片描述

5.执行安装命令(此命令需要安装过gcc。如果没有安装gcc 需要安装 gcc )

# package/install 
// CentOS 安装gcc 命令
yum -y install gcc gcc-c++ autoconf make

6.检查安装

# cat /etc/inittab 

如果出现如下图所示则安装成功。 
这里写图片描述

编写小程序测试

supervise添加监控的服务非常容易,只需要添加一个被监控的服务的目录,在该目录中添加启动服务器的名字为run的脚本文件即可。

此处编写一个简单的c程序,进行测试。

  1. 建立一个test目录,进入该目录
  2. 编写简单测试程序test.c 内容如下:
#include <stdio.h>
#include <stdlib.h>
int main()
{
        int ix = 0; for(;; ix++) { printf("%d ", ix); sleep(1); } return 0; }

3.编译test.c输出为test。

gcc -o test test.c

4.在test目录下编写脚本run(注意:名字必须为run。注意run 脚本里不能后台启动。),来执行test程序,以便supervise进行调用

#!/bin/sh
echo "start test!"
./test

5.启动

nohup supervise test/  > /dev/null 2>&1 &

6.检查test进程

ps -ef| grep "test"

如下图: 
这里写图片描述

此时我门模拟杀死 test 进程。则test进程会重启。 
(我门可以看到重启的test 进程为 21099)

这里写图片描述

如果要杀死 test进程怎么办呢? 
很简单先杀死 supervise 的守护进程就好了。也就是杀死上图的 21080 进程。杀死守护进程以后再杀死test 进程就不会重启test 进程了。

好了今天就说到这里吧。

猜你喜欢

转载自www.cnblogs.com/itcomputer/p/9206816.html