gm更新脚本修改

main
PC-202302260912\Administrator 2023-07-27 13:42:53 +08:00
parent e0f47ab17c
commit 86b2e2a439
3 changed files with 225 additions and 109 deletions

View File

@ -0,0 +1,131 @@
#!/bin/bash
source ../main.sh
show_file(){
filer=$1
ls /data/update/$filer/ | tr ' ' '\n'
}
# 判断一个字符串是否是合法的IP地址
is_valid_ip() {
local ip=$1
local pattern="^([0-9]{1,3}\.){3}[0-9]{1,3}$"
if [[ $ip =~ $pattern ]]; then
# 检查每个数字是否在0到255之间
local IFS='.'
read -ra octets <<< "$ip"
for octet in "${octets[@]}"; do
if (( octet < 0 || octet > 255 )); then
return 1
fi
done
return 0
else
return 1
fi
}
mod_package(){
ip=${1}
package=${2}
# 源服务器上的tar压缩包路径
source_tar="/data/update/package/"
# 游戏服目标服务器上的目标目录路径
destination_dir="/data/jieling/server"
echo "正在处理服务器 $ip"
scp "$source_tar/$package" "$ip:$destination_dir"
ssh "$ip" "tar -zxvf $destination_dir/$package -C $destination_dir"
ssh "$ip" "rm -rf $destination_dir/$package"
echo "处理完成服务器 $ip "
}
#正式服发送
send_package_reboot(){
package=${1}.tar.gz
ip_txt=${2}
reboot=${3}
if is_valid_ip "$ip_txt"; then
echo "$ip_txt 开始测试服更新"
mod_package $ip_txt $package
case $reboot in
0)
echo "热更,不需要重启... $i"
;;
1)
ssh $i "bash /data/jieling/server/bin/reboot.sh core1"
echo "重启测试服服务器 $i"
;;
esac
else
echo "$ip_txt 开始正式服更新"
for i in `awk '{print $2}' /data/update/script/txt/$ip_txt`
do
mod_package $i $package
case $reboot in
0)
echo "热更,不需要重启... $i"
;;
1)
ssh $i "supervisorctl restart all"
echo "重启正式服服务器 $i"
;;
esac
done
fi
}
#gm重启
gm_reboot(){
ip=${1}
ssh $ip "bash /data/jieling/gm/config/script/gm_reboot.sh"
ssh $ip "ps -ef|grep gm_tw_admin"
echo "gm重启完毕"
}
mod_gm_package(){
ip=${1}
# 游戏服目标服务器上的目标目录路径
destination_dir="/data/jieling/gm"
# 源服务器上的tar压缩包路径
source_tar="/data/update/project/miduo_gm/gm/gm.tar.gz"
if [ -e source_tar ]; then
echo "正在处理服务器 $ip"
scp "$source_tar/$package" "$ip:$destination_dir"
ssh "$ip" "tar -zxvf $destination_dir/$package -C $destination_dir"
ssh "$ip" "rm -rf $destination_dir/$package"
echo "处理完成服务器 $ip "
else
echo "gm.tar.gz 不存在,请先去打包 "
gm
fi
}
gm_send_package(){
ip_txt=${1}
if is_valid_ip "$ip_txt"; then
echo "$ip_txt 开始更新gm/ip"
mod_gm_package $ip_txt
read -r -p "更新完毕是否需要重启Y/N: " input
case $input in
[yY][eE][sS]|[yY])
gm_reboot $ip
;;
*)
echo "over..."
exit 0
;;
esac
else
echo "$ip_txt 开始更新gm/txt"
for i in `awk '{print $2}' /data/update/script/txt/$ip_txt`
do
mod_gm_package $i
gm_reboot $i
done
fi
}

155
main.sh
View File

@ -3,6 +3,9 @@
#删除命令乱码解决
stty erase ^h
#引用其他文件
source function/function.sh
# 定义ANSI颜色转义码
#red='\033[0;31m' #红色
#green='\033[0;32m' #绿色
@ -31,11 +34,6 @@ show_menu() {
echo -e "0. ${red}退出${NC}"
}
show_file(){
filer=$1
ls /data/update/$filer/ | tr ' ' '\n'
}
# 定义函数,用于处理用户输入
handle_input() {
read -p "请输入选项编号: " choice
@ -75,58 +73,23 @@ handle_input() {
esac
}
# 源服务器上的tar压缩包路径
source_tar="/data/update/package/"
# 目标服务器上的目标目录路径
destination_dir="/data/"
#单服发送
send_one_ip(){
package=${1}.tar.gz
ip=${2}
# 单服务器更新
echo "正在处理服务器 $ip "
scp "$source_tar/$package" "$ip:$destination_dir"
ssh "$ip" "tar -zxvf $destination_dir/$package -C $destination_dir/jieling/server/"
ssh "$ip" "rm -rf $destination_dir/$package"
echo "处理完成服务器 $ip "
}
#多服发送
send_many_ip(){
package=${1}.tar.gz
iptxt=${2}.txt
reboot=$3
for i in `awk '{print $2}' /data/update/script/txt/$iptxt`
do
echo "正在处理服务器 $i "
scp "$source_tar/$package" "$i:$destination_dir"
ssh "$i" "tar -zxvf $destination_dir/$package -C $destination_dir/jieling/server/"
ssh "$i" "rm -rf $destination_dir/$package"
echo "处理完成服务器 $i "
if [ ! -z $reboot ];then
ssh "$i" "supervisorctl restart all"
echo "重启服务器 $i "
fi
done
}
#游戏服更新
game(){
echo -e "================================"
echo -e "开始更新${green}游戏服${NC}"
echo -e "1. ${yellow}打包${NC}"
echo -e "2. ${yellow}单服更新发送${NC}"
echo -e "3. ${yellow}渠道更新发送${NC}"
echo -e "4. ${yellow}单服更新并重启${NC}"
echo -e "5. ${yellow}渠道更新并重启${NC}"
echo -e "1. ${yellow}打更新包${NC}"
echo -e "2. ${yellow}打热更包${NC}"
echo -e "3. ${yellow}正式服热更${NC}"
echo -e "4. ${yellow}正式服停服更新${NC}"
echo -e "5. ${yellow}测试服热更${NC}"
echo -e "6. ${yellow}测试服停服更新${NC}"
echo -e "0. ${green}返回主菜单${NC}"
echo -e "*. ${red}其他任意键退出程序${NC}"
read -p "请输入选项编号: " choice
case $choice in
1)
echo -e "${yellow}打包${NC}"
echo -e "${yellow}打更新包${NC}"
echo "=============================="
show_file project
read -p "请输入项目地址: " project
show_file package
@ -136,42 +99,56 @@ game(){
game
;;
2)
echo -e "${yellow}单独发送${NC}"
echo -e "${yellow}打热更包${NC}"
echo "=============================="
show_file project
read -p "请输入项目地址: " project
show_file package
read -p "请输入包名(不需要带文件后缀): " package
read -p "请输入游戏服ip: " ip
echo -e "开始发送 包名:$package, ip$ip"
send_one_ip $package $ip
read -p "请输入包名(不需要带文件后缀): " package
echo -e "开始打包 项目:$project, 包名:$package"
bash hotfix_game.sh $project $package
game
;;
3)
echo -e "${yellow}渠道发送${NC}"
echo -e "${yellow}正式服热更${NC}"
echo "=============================="
show_file package
read -p "请输入包名(不需要带文件后缀): " package
show_file script/txt
read -p "请输入文件名称(不需要带文件后缀): " iptxt
echo -e "开始发送 包名:$package, 渠道:$iptxt"
send_many_ip $package $iptxt
read -p "请输入文件名称(不需要带文件后缀): " channel
echo -e "开始发送 包名:$package, channel$channel"
send_package_update $package ${channel}.txt 0
game
;;
4)
echo -e "${yellow}单独发送并重启${NC}"
echo -e "${yellow}正式服停服更新${NC}"
echo "=============================="
show_file package
read -p "请输入包名(不需要带文件后缀): " package
show_file script/txt
read -p "请输入文件名称(不需要带文件后缀): " channel
echo -e "开始发送 包名:$package, channel$channel"
send_package_update $package ${channel}.txt 1
game
;;
5)
echo -e "${yellow}测试服热更${NC}"
echo "=============================="
show_file package
read -p "请输入包名(不需要带文件后缀): " package
read -p "请输入游戏服ip: " ip
echo -e "开始发送 包名:$package, ip$ip"
send_one_ip $package $ip
ssh $ip "bash /data/jieling/server/bin/reboot.sh core1"
send_package_update $package $ip 0
game
;;
5)
echo -e "${yellow}渠道发送并重启${NC}"
6)
echo -e "${yellow}测试服停服更新${NC}"
echo "=============================="
show_file package
read -p "请输入包名(不需要带文件后缀): " package
show_file script/txt
read -p "请输入文件名称(不需要带文件后缀): " iptxt
echo -e "开始发送 包名:$package, 渠道:$iptxt"
send_many_ip $package $iptxt
read -p "请输入游戏服ip: " ip
echo -e "开始发送 包名:$package, ip$ip"
send_package_update $package $ip 1
game
;;
0)
@ -187,30 +164,54 @@ game(){
#gm更新
gm(){
txt=gm_ip.txt
echo -e "================================"
echo -e "开始更新${green}gm服${NC}"
echo -e "1. ${yellow}单渠道更新${NC}"
echo -e "2. ${yellow}多渠道更新${NC}"
echo -e "1. ${yellow}打包${NC}"
echo -e "2. ${yellow}单机器更新${NC}"
echo -e "3. ${yellow}批量更新${NC}"
echo -e "4. ${yellow}单机器重启${NC}"
echo -e "5. ${yellow}批量重启${NC}"
echo -e "0. ${green}返回主菜单${NC}"
echo -e "*. ${red}其他任意键退出程序${NC}"
read -p "请输入选项编号: " choice
case $choice in
1)
echo -e "${yellow}单渠道更新${NC}"
echo -e "${yellow}打包${NC}"
show_file project
read -p "请输入表所在游戏项目地址: " project
read -p "请输入gm服ip: " ip
echo -e "开始更新gm ip$ip"
bash update_gm.sh $project $ip
bash update_gm.sh $project
echo -e "gm打包完成"
gm
;;
2)
echo -e "${yellow}多渠道更新${NC}"
show_file project
read -p "请输入项目地址: " project
echo -e "${yellow}单机器更新${NC}"
read -p "请输入游戏服ip: " ip
echo -e "开始更新gm"
bash update_gm.sh $project
gm_send_package $ip
gm
;;
3)
echo -e "${yellow}批量更新${NC}"
echo -e "开始更新gm"
gm_send_package txt
gm
;;
4)
echo -e "${yellow}单机器重启${NC}"
read -p "请输入游戏服ip: " ip
echo -e "开始重启gm"
gm_reboot $ip
gm
;;
5)
echo -e "${yellow}单机器更新${NC}"
read -p "请输入游戏服ip: " ip
echo -e "开始更新gm"
for i in `awk '{print $2}' /data/update/script/txt/$txt`
do
gm_reboot $i
done
gm
;;
0)

View File

@ -13,10 +13,6 @@ BASE_DIR="/data/update/project/miduo_gm"
table=$1
TABLE_DIR="/data/update/project/${table}"
#更新服务器地址可以为空表示更新全部gm
ip=$2
file=txt/gm_ip.txt
#excel
cd ${TABLE_DIR}/data_excel/ || exit
svn up
@ -27,33 +23,21 @@ java -Dfile.encoding=UTF-8 -Djava.ext.dirs=./lib ExcelUtils
cd ${BASE_DIR}/ || exit
git pull
mvn clean package
mvn clean
if [ ! -z ${ip} ];then
update ${ip} ${TABLE_DIR} ${BASE_DIR}
else
for i in `awk '{print $2}' /data/update/script/$file`
do
update $i ${TABLE_DIR} ${BASE_DIR}
done
fi
#删除旧文件
rm -rf ${BASE_DIR}/gm/*
#创建新目录文件
zip_dir=${BASE_DIR}/gm/config
mkdir -p ${zip_dir}/jsonconf
mkdir -p ${zip_dir}/script
#复制文件
cp -rf ${TABLE_DIR}/miduo_server/conf/server/ItemConfig.txt ${zip_dir}/jsonconf/ItemConfig.txt
cp -rf ${TABLE_DIR}/miduo_server/conf/server/RechargeCommodityConfig.txt ${zip_dir}/jsonconf/RechargeCommodityConfig.txt
cp -rf ${BASE_DIR}/conf/jsonconf/Reason.txt ${zip_dir}/jsonconf/Reason.txt
cp -rf ${BASE_DIR}/target/gm_tw_admin-1.0-SNAPSHOT.jar ${BASE_DIR}/gm/gm_tw_admin-1.0-SNAPSHOT.jar
cp -rf ${BASE_DIR}/conf/script ${BASE_DIR}/gm/config/script
update(){
ip=${1}
TABLE_DIR=${2}
BASE_DIR=${3}
echo "开始更新 ${ip} "
#表文件
scp -r ${TABLE_DIR}/miduo_server/conf/server/ItemConfig.txt ${ip}:/data/jieling/gm/config/jsonconf/
scp ${TABLE_DIR}/miduo_server/conf/server/RechargeCommodityConfig.txt ${ip}:/data/jieling/gm/config/jsonconf/
scp ${BASE_DIR}/conf/jsonconf/Reason.txt ${ip}:/data/jieling/gm/config/jsonconf/
#jar包
scp ${BASE_DIR}/target/gm_tw_admin-1.0-SNAPSHOT.jar ${ip}:/data/jieling/gm/gm_tw_admin-1.0-SNAPSHOT.jar
#脚本
ssh ${ip} "mkdir -p /data/jieling/gm/config/script"
scp -r ${BASE_DIR}/conf/script ${ip}:/data/jieling/gm/config/script
echo "开始重启 ${ip} 服务器 "
ssh ${ip} "sh /data/jieling/gm/config/script/gm_reboot.sh"
ssh ${ip} "ps -ef|grep gm_tw_admin"
}
#打包
cd ${BASE_DIR}/gm || exit
tar -czvf gm.tar.gz ./*