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安裝
- 獲取supervise 安裝包:
點我下載:daemontools-0.76.tar.gz - 新建文件夾supervise
- 下載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程序,進行測試。
- 建立一個test目錄,進入該目錄
- 編寫簡單測試程序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進行管理利器