阿里云实践-批量运行/重启/停止端口服务的脚本
作者:互联网
场景:
因自己这边接活,需要多节点部署服务,且节点数据以后可扩。自己每次部署更新都要全部操作一遍所有端口的服务,太费事。
故:自己参考资料整理了一套执行脚本,只要在一个文件中指定所有端口号,就可以一次性操作多个服务,并可以在执行命令时指定某些端口来操作服务。
脚本:
脚本我拆分成2个文件:runner.sh(公用,封装操作逻辑)、wc-org-tenant.sh (根据项目名称自定义,指定一些个性化参数)
逻辑:核心思想就是在wc-org-tenant.sh中指定:DEFAULT_PORT=8880,8881,即我们要批量操作的端口号,然后根据执行命令来批量操作。
执行命令:// .sh文件后面的第一个参数(红色)为执行命令,第二个参数(绿色)为执行端口
批量重启所有默认端口的服务:sh wc-org-tenant.sh restart
批量启动所有默认端口的服务:sh wc-org-tenant.sh start
批量停用所有默认端口的服务:sh wc-org-tenant.sh stop
批量重启指定端口的服务:sh wc-org-tenant.sh restart 8881,8882,8883,8884
批量启动指定端口的服务:sh wc-org-tenant.sh start 8881,8882,8883,8884
批量停用指定端口的服务:sh wc-org-tenant.sh stop 8881,8882,8883,8884
runner.sh://java -jar那行是运行自己的java服务,后面的参数也是服务需要,大家看自己的需求来改自己的启动命令,我这里是java运行springboot
#执行运行命令
command=$1
#指定操作端口
PORT=$2
function start(){
tpid=`netstat -ltnp |grep java |grep "0.0.0.0:$1" |awk '{print $7}' | awk -F/ '{print $1}'`
if [ "${tpid}" ]; then
echo "启动:失败,服务端口已经运行:$1";
else
echo "启动:开始启动服务端口:$1";
rm -f tpid
java -jar ${APP_NAME} --server.port=$1 --spring.profiles.active=test --eureka.client.service-url.defaultZone=http://${EUREKA_IP}/eureka/eureka --eureka.instance.ip-address=${CLIENT_IP} &
echo $! > tpid
sleep 15
check $1
fi
}
function stop(){
tpid=`netstat -ltnp |grep java |grep "0.0.0.0:$1" |awk '{print $7}' | awk -F/ '{print $1}'`
echo "停止:开始停用服务端口:$1";
if [ "${tpid}" ]; then
kill -15 $tpid;
#暂停5秒,等待结束
sleep 5
#再次检测进程是否杀死
tpid=`netstat -ltnp |grep java |grep "0.0.0.0:$1" |awk '{print $7}' | awk -F/ '{print $1}'`
if [ "${tpid}" ]; then
echo "停止:强制停止服务端口:$1";
kill -9 $tpid;
sleep 5
fi
check $1
else
echo "停用:忽律,服务端口未运行:$1";
fi
}
function check(){
tpid=`netstat -ltnp |grep java |grep "0.0.0.0:$1" |awk '{print $7}' | awk -F/ '{print $1}'`
if [ "${tpid}" ]; then echo "检测:服务端口运行中:$1"; else echo "检测:服务端口已停用:$1"; fi
}
#如果命令行没有指定执行的端口,就执行默认端口
if [ ! "$PORT" ]; then
#echo "###未输入端口,默认处理端口 => ${DEFAULT_PORT}"
PORT="${DEFAULT_PORT}"
fi
echo ">>>>>>>>>>>>>>>>>>执行脚本-开始 执行命令 => ${APP_NAME} ${command} ${PORT}"
#开始循环处理命令任务
for i in `echo ${PORT} | sed 's/,/ /g'`
do
echo -e "\n============> 开始处理服务端口 ${command}:${i}"
if [ "${command}" == "start" ]; then
start $i
elif [ "${command}" == "stop" ]; then
stop $i
elif [ "${command}" == "restart" ]; then
stop $i
start $i
else
echo "无效的执行命令参数 => ${command}"
fi
echo "<============ 已处理完毕服务端口 ${command}:${i} "
done
echo -e "\n<<<<<<<<<<<<<<<<<<执行脚本-结束 执行命令 => ${APP_NAME} ${command} ${PORT}"
wc-org-tenant.sh : 因为自己项目启动时候需要指定EUREKA的IP地址,所以这里有相关IP配置,在runner.sh中有体现,大家根据自己需要调整
#!/bin/sh
APP=wc-org-tenant
APP_NAME=${APP}".jar"
#默认进行操作的端口服务(可以不要,根据自己需求来)
CLIENT_IP=116.*.*.86
EUREKA_IP=116.*.*.86
#默认端口
DEFAULT_PORT=8880,8881
#导入公共模块
. ./runner.sh
重启8880端口的服务
重启完毕
阿里云代金劵链接:https://www.aliyun.com/minisite/goods?userCode=eav1eps6
标签:服务,批量,tpid,重启,端口,echo,sh,PORT 来源: https://blog.csdn.net/WJL_MGQS/article/details/118815138