1. 程式人生 > >021_supervise進行管理利器

021_supervise進行管理利器

http BE 腳本 min ack conf .gz 執行 sta

一、公司的類似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 進程了。

好了今天就說到這裏吧。

021_supervise進行管理利器