supervisor sh批量启停作业管理脚本
因为不同作业对于不同场景下的启停不一致,当作业超多时会造成启停上的耗时增加和错误性的增加。为了管理方便,增加一个shell脚本来一键临时启停是较好的办法。
思路
- 临时配置文件
好处就是可以根据业务场景进行配置 - 允许start
已经start的略过,stop的start - 允许stop
已经stop的略过,start的stop - 允许restart
已经start的先stop再start,stop的start
初始化
做一下初始检查,读取配置文件,生成数组
#!/bin/bash
# 程序列表文件,每行一个程序名
PROGRAMS_LIST="programs_list.txt"
# 检查是否提供了操作参数
if [ $# -eq 0 ]; then
echo "使用方法: $0 {start|stop|restart}"
exit 1
fi
# 读取操作参数
ACTION=$1
PROGRAMS=()
# 检查程序列表文件是否存在
if [ ! -f "$PROGRAMS_LIST" ]; then
echo "程序列表文件不存在: $PROGRAMS_LIST"
exit 1
fi
# 读取文件中的每个行项作为程序名称
while IFS= read -r program
do
PROGRAMS+=("$program") # 将程序名称添加到数组中
done < "$PROGRAMS_LIST"
循环数组进行操作
# 根据提供的参数执行操作
for program in "${PROGRAMS[@]}"
do
if [ "$ACTION" == "start" ]; then
# 如果操作是启动
elif [ "$ACTION" == "stop" ]; then
# 如果操作是停止
elif [ "$ACTION" == "restart" ]; then
# 如果操作是重启
else
echo "未知操作: $ACTION"
done
echo "操作完成。"
具体判断
- start
# 如果操作是启动
if supervisorctl status "$program" > /dev/null 2>&1; then
if supervisorctl status "$program" | grep -q 'RUNNING'; then
echo "程序已经在运行: $program"
else
echo "启动程序: $program"
supervisorctl start "$program"
fi
else
echo "程序不存在,无法启动: $program"
fi
- stop
# 如果操作是停止
if supervisorctl status "$program" > /dev/null 2>&1; then
if supervisorctl status "$program" | grep -q 'STOPPED'; then
echo "程序已停止: $program"
else
echo "停止程序: $program"
supervisorctl stop "$program"
fi
else
echo "程序不存在,无法启动: $program"
fi
- restart
# 如果操作是重启
if supervisorctl status "$program" > /dev/null 2>&1; then
if supervisorctl status "$program" | grep -q 'RUNNING'; then
echo "停止程序: $program"
supervisorctl stop "$program"
echo "启动程序: $program"
supervisorctl start "$program"
else
echo "启动程序: $program"
supervisorctl start "$program"
fi
else
echo "程序不存在,无法启动: $program"
fi