Background
- supervisor是用Python语言开发的一套通用的进程管理程序,可以将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时可以自动重启。
- glances也是用Python语言开发的一款用于 Linux、BSD 的开源命令行系统监视工具,能够监视 CPU、负载、内存、磁盘 I/O、网络流量、文件系统、系统温度等信息。
- daemon-operator.sh是我自己开发的shell脚本,该脚本作用是管理supervisor中的shell类守护进程(jar包类程序可以参考另一篇博客【jar包服务操作】【配置 web 界面监控服务运行】【shell脚本】),主要功能就是添加守护进程和删除守护进程。
1、supervisor安装配置
先贴上supervisor官方文档。
- 安装、启动、自启
yum -y install epel-release
yum install -y supervisor
systemctl start supervisord
systemctl enable supervisord
- 修改配置
配置端口、用户名、密码
cat <<EOF >> /etc/supervisord.conf
[inet_http_server]
port=*:9001
username=admin
password=cloudansys[supervisor]
EOF
- 重启
systemctl restart supervisord
- 浏览器访问 9001端口,输入配置的用户名密码就可以看到下图
2、glances安装配置
先贴上glances官方文档。
- 安装
pip install glances[all]
- 启动
支持多种模式,这里我们使用Web Server Mode浏览器模式,就是支持在浏览器中访问。
glances -w
- 浏览器访问61208端口就可以看到下图
3、daemon-operator.sh脚本的使用
先贴上daemon-operator.sh源码。
这里我们以glances服务为例来介绍下该脚本的使用,该脚本还可用于其他类似服务,比如redis,rabbtimq等。
#!/bin/bash
:<<!
【脚本说明】
1、此脚本用于管理supervisor中的守护进程;
2、主要功能有添加守护进程、删除守护进程;
3、添加守护进程时需要三个参数,程序名称、程序执行目录、程序启动命令;
!
# 该脚本名
script_name='daemon-operator.sh'
# 配置文件
dir_conf=/etc/supervisord.d/
conf_def=/etc/supervisord.d/default.base
conf_use=/etc/supervisord.d/shell.ini
# 提示信息
s1="If add program, please input params 【add <program_name> <\"cmd\">】"
s2="\n If delete program, please input params 【del <program_name>】"
s3="\n eg.【$script_name add glances \"/usr/local/python3/bin/glances -w\"】"
s4="\n ps.【Absolute path is recommended for the cmd】"
msg="$s1$s2$s3$s4"
# 定制化shell输出
function custom_print(){
echo -e "\033[5;34m ***** \033[0m"
echo -e "\033[32m $@ ! \033[0m"
echo -e "\033[5;34m ***** \033[0m"
}
# 判断该项目是否已配置 web
function exist_program(){
# 首先判断该项目是否为空
if [[ ! $1 ]]; then
echo "true"
else
# 再判断 web 配置中是否已配置该项目
find $dir_conf -name "*.ini" | xargs grep -wq "\[program\:$1\]" && echo "true" || echo "false"
fi
}
# 获取基础的配置行数
function get_base_row() {
echo $(cat $conf_def | wc -l)
}
# 获取字符串所在的行号
function get_row_num() {
echo $(sed -n "/\[program\:$1\]/=" $conf_use)
}
# 根据查找内容删除配置的程序
function del_program(){
res=$1
# 去掉 [program*
res=${res%\[*}
# 去掉一个冒号:,剩下 文件名:行号
res=${res%:*}
# 获取文件名
file=${res%:*}
# 获取所在的行号,即起始行号
start_row=${res#*:}
# 基础行号
base_row=$(get_base_row)
# 终止行号
end_row=$((start_row + base_row - 1))
# 删除第N~M行
str_d='d'
sed -i "$start_row,$end_row$str_d" $file
}
# web 界面配置 【该功能需要安装 supervisor】
function config(){
# 判断是否安装了 supervisor
if [[ -d /etc/supervisord.d/ ]]; then
# 再判断是否已配置了该项目
if [[ $(exist_program $1) = "false" ]]; then
title="[program:$1]"
user="user=root"
cmd="command=$2"
sed -i "1c $title" $conf_def
sed -i "2c $user" $conf_def
sed -i "3c $cmd" $conf_def
cat $conf_def >> $conf_use
supervisorctl update
else
msg="The program 【$1】 has been added already"
custom_print $msg
exit 1
fi
else
msg='Supervisor has not been installed yet'
custom_print $msg
exit 1
fi
}
# 判断输入参数
if [[ -z $1 || -z $2 || $1 = "help" ]]; then
custom_print $msg
elif [[ $1 = "add" ]]; then
config $2 "$3"
msg="【$2】 add success"
custom_print $msg
elif [[ $1 = "del" ]]; then
# 在所有ini文件中查找
res=$(find /etc/supervisord.d/ -name "*.ini" | xargs grep -n "\[program\:$2\]")
if [[ ! -z $res ]]; then
del_program $res
supervisorctl update
msg="【$2】 delete success"
custom_print $msg
else
msg="The program 【$2】 has not been added yet"
custom_print $msg
fi
fi
- 添加、删除glances服务到supervisor中
- 添加上就可以看到下图
- 删除的配置的服务