rebar3 服务器
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
DB_HOST='172.16.12.220'
|
||||
DB_USE='ddxqadmin'
|
||||
DB_PASS='ddxq@44168deabe63'
|
||||
DB_PORT='3306'
|
||||
DB_SERVER='ddxq_s900_trunk_login'
|
||||
|
||||
DB_LOCAL_HOST='127.0.0.1'
|
||||
DB_LOCAL_USE='root'
|
||||
DB_LOCAL_PASS='root'
|
||||
DB_LOCAL_PORT='3306'
|
||||
DB_LOCAL_SERVER='local_sql'
|
||||
|
||||
LOGIN_SERVER_NODE='login_server_s900@172.16.12.220'
|
||||
DEF_SERVER_ID='177'
|
||||
DEF_ALIAS='lwt_game'
|
||||
DEF_SERVER='game_server'
|
||||
DEF_COOKIE='node-cookie'
|
||||
SVN='svn'
|
||||
PYTHON='python'
|
||||
ERL='erl'
|
||||
SQL_GAME_UPDATE='server/server/apps/game_server/sql/game_update.sql'
|
||||
SQL_GAME_INIT='server/server/apps/game_server/sql/game_init.sql'
|
||||
|
||||
if [[ `in_cygwin` == "1" ]] ; then
|
||||
REBAR='rebar3.cmd'
|
||||
WERL='werl'
|
||||
ESCRIPT_EMULATOR='werl'
|
||||
else
|
||||
REBAR='rebar3'
|
||||
fi
|
||||
|
||||
## 项目组自定义路径
|
||||
# ====================================================================================
|
||||
|
||||
# 服务器svn根目录
|
||||
SVN_BASE_URL=http://gwsj.4399svn.com/svn/ddt/project4
|
||||
# 发版根目录 运维的目录规范 /data/xxx/server
|
||||
PUB_ROOT=/data/ddxq/server
|
||||
# 发版脚本 运维的规范 xxxpub
|
||||
PUB_CMD=ddxqpub
|
||||
|
||||
# DEV BETA STABLE 这三个目录的代码对应运维给的三个发版目录
|
||||
# 假设DEV对应主干的代码目录 比如主干代码是 ${SVN_BASE_URL}/trunk, 这里就填DEV=trunk
|
||||
DEV=trunk
|
||||
BETA=branches/cn/stage1
|
||||
STABLE=stable
|
||||
BANSHU=branches/banshu
|
||||
|
||||
# svn账号密码
|
||||
USER=shouyouyizu
|
||||
PASSWORD=39420981
|
||||
|
||||
# 代码checkout的临时目录,编译用
|
||||
TMP_SOURCE=/data/tmp_server/ddxq
|
||||
|
||||
# 内网部署路径
|
||||
SERVER_DIR=/data/server/ddxq
|
||||
|
||||
# 内网主干登录服目录(内网重启和热更时指定的登录服)
|
||||
LOGIN_SERVER=login_server_s900
|
||||
|
||||
# 内网主干游戏服目录(内网重启和热更时指定的游戏服)
|
||||
GAME_SERVER=game_server_s901
|
||||
|
||||
# 内网版署登录服目录(内网重启和热更时指定的登录服)
|
||||
BS_LOGIN_SERVER=login_server_s700
|
||||
|
||||
# 内网版署游戏服目录(内网重启和热更时指定的游戏服)
|
||||
BS_GAME_SERVER=game_server_s701
|
||||
@@ -0,0 +1,6 @@
|
||||
#! /bin/bash
|
||||
|
||||
ROOT=`cd $(dirname $0);pwd`
|
||||
cd ${ROOT}
|
||||
|
||||
./game_server remote_console
|
||||
@@ -0,0 +1,227 @@
|
||||
#!/usr/bin/env bash
|
||||
#-------------------------------------------------
|
||||
# 工具包主脚本
|
||||
# @author lwt
|
||||
#-------------------------------------------------
|
||||
|
||||
# 检查是否在cygwin中
|
||||
in_cygwin(){
|
||||
local os=$(uname)
|
||||
if [[ "${os:0:3}" == "CYG" ]]; then
|
||||
echo "1"
|
||||
else
|
||||
echo "0"
|
||||
fi
|
||||
}
|
||||
|
||||
# 检查某个函数是否已经定义
|
||||
is_fun_exists(){
|
||||
declare -F "$1" > /dev/null; return $?
|
||||
}
|
||||
|
||||
# 检查某个命令是否存在h
|
||||
is_command_exists(){
|
||||
command -v $1 >/dev/null; return $?
|
||||
}
|
||||
|
||||
# 检查screen session是否存在
|
||||
is_screen_exists(){
|
||||
[[ $(screen -ls | grep "$1" | wc -l ) -gt 0 ]] ; return $?
|
||||
}
|
||||
|
||||
# 是否整数
|
||||
is_integer(){
|
||||
local re='^[0-9]+$'
|
||||
[[ $1 =~ $re ]]; return $?
|
||||
}
|
||||
|
||||
# 检查数组中是否存在某个元素
|
||||
# 参数1:数组
|
||||
# 参数2: 元素
|
||||
in_array(){
|
||||
declare -a haystack=("${!1}")
|
||||
local needle=${2}
|
||||
for v in ${haystack[@]}; do
|
||||
if [[ ${v} == ${needle} ]]; then
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
return 1
|
||||
}
|
||||
|
||||
# 检查当前运行环境中是否存在tty
|
||||
has_tty(){
|
||||
[[ -t 1 ]]; return $?
|
||||
}
|
||||
|
||||
|
||||
|
||||
# 输出一条普通信息
|
||||
INFO(){
|
||||
echo -e "\e[92m=>\e[0;0m ${1}"
|
||||
}
|
||||
|
||||
# 输出一条普通信息
|
||||
FROMAT(){
|
||||
echo -e "\e[92m \e[0;0m ${1}"
|
||||
}
|
||||
|
||||
# 输出一条错误信息
|
||||
ERR(){
|
||||
>&2 echo -e "\e[91m>> ${1}\e[0;0m"
|
||||
}
|
||||
|
||||
# 打印信息
|
||||
OPT() {
|
||||
echo -e "[操作] $(date '+%Y-%m-%d %H:%M:%S') $@"
|
||||
}
|
||||
|
||||
CMD() {
|
||||
echo -e "[指令] $(date '+%Y-%m-%d %H:%M:%S') $@"
|
||||
}
|
||||
|
||||
|
||||
|
||||
# 检查锁
|
||||
lock_check(){
|
||||
local task=$1
|
||||
lock=/tmp/server_lock_${task}.lock
|
||||
if [ -f $lock ]; then
|
||||
taskname=$(<$lock)
|
||||
ERR "正在执行\"$taskname\"任务,需要等待该任务完成..."
|
||||
ERR "如无任务执行,自行删除${lock}文件"
|
||||
exit 1
|
||||
fi
|
||||
touch $lock # 加锁
|
||||
echo $task > $lock
|
||||
}
|
||||
|
||||
# 解锁
|
||||
lock_release(){
|
||||
local task=$1
|
||||
lock=/tmp/server_lock_${task}.lock
|
||||
rm -f $lock
|
||||
}
|
||||
|
||||
# 调用函数
|
||||
_CALL_FUNCTION(){
|
||||
resolve_arg $@
|
||||
if is_fun_exists ${FUN_NAME}; then
|
||||
check_arg
|
||||
${FUN_NAME} $ARGS
|
||||
exit 0
|
||||
fi
|
||||
help
|
||||
}
|
||||
|
||||
|
||||
# 解析参数
|
||||
resolve_arg(){
|
||||
FUN_NAME="fun_${1}"
|
||||
shift
|
||||
while [ $# -ne 0 ] ; do
|
||||
PARAM=$1
|
||||
shift
|
||||
case $PARAM in
|
||||
--) break ;;
|
||||
--server|-s) SERVER_TYPE=$1; shift ;;
|
||||
--alias|-a) ALIAS=$1; shift ;;
|
||||
--server_id|-si) SERVER_ID=$1; shift ;;
|
||||
--db_host|-dbh) DB_HOST=$1; shift;;
|
||||
*) ARGS="$ARGS $PARAM" ;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
# 检测参数
|
||||
check_arg(){
|
||||
if [ "${ALIAS}" = "" ]; then
|
||||
ALIAS=${DEF_ALIAS}
|
||||
fi
|
||||
if [ "${SERVER_TYPE}" = "" ]; then
|
||||
SERVER_TYPE=${DEF_SERVER}
|
||||
fi
|
||||
if [ "${SERVER_ID}" = "" ]; then
|
||||
SERVER_ID=${DEF_SERVER_ID}
|
||||
fi
|
||||
if [ "${DB_HOST}" = "" ]; then
|
||||
DB_HOST=${DB_HOST}
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
help(){
|
||||
INFO "当前路径:${ROOT}"
|
||||
INFO "用法:"
|
||||
INFO "指令 [参数]"
|
||||
INFO "参数:"
|
||||
INFO " -si, --server_id 服务器id 推送的版本"
|
||||
INFO " -a, --alias 别名"
|
||||
INFO " -s, --server game_server|login_server 服务器类型"
|
||||
action
|
||||
INFO "未传参数则取默认参数:可以config.sh修改"
|
||||
INFO "是否查看默认参数(y/n):"
|
||||
read IS
|
||||
if [ ${IS} == y ]; then
|
||||
INFO "默认参数:`cat ./shell/config.sh`"
|
||||
fi
|
||||
}
|
||||
|
||||
action(){
|
||||
INFO "指令列表:"
|
||||
for k in ${!DOC[@]}; do
|
||||
>&2 echo -e -n "\e[95m${k}\e[0;0m"
|
||||
eval "printf ' %.0s' {1..$((26 - ${#k}))}"
|
||||
>&2 echo -e "${DOC[$k]}"
|
||||
done
|
||||
}
|
||||
|
||||
# 输出命令行不全信息
|
||||
fun_completion(){
|
||||
echo $(declare -p DOC)
|
||||
}
|
||||
|
||||
|
||||
|
||||
# --- 执行入口 -----------------------------------------------------
|
||||
declare -A DOC
|
||||
export ROOT=$(dirname $(dirname "$PWD"))
|
||||
|
||||
# 加载配置文件
|
||||
source ${ROOT}/server/server/shell/config.sh
|
||||
|
||||
|
||||
|
||||
# 载入子仓库中的工具脚本
|
||||
scripts=("server/server/shell/gen.sh" "server/server/shell/sql.sh" "server/server/shell/srv.sh" "server/server/shell/svn.sh")
|
||||
for f in ${scripts[@]}; do
|
||||
if [ ! -f ${ROOT}/${f} ]; then
|
||||
continue
|
||||
fi
|
||||
source ${ROOT}/${f}
|
||||
done
|
||||
|
||||
# 根据参数调用相应的命令
|
||||
_CALL_FUNCTION $@
|
||||
|
||||
|
||||
|
||||
#declare -A DOC
|
||||
#FilePath=$(dirname $(readlink -f "$0"))
|
||||
#ROOT=$(dirname "${FilePath}")
|
||||
#
|
||||
## 加载配置文件
|
||||
#source ${ROOT}/shell/config.sh
|
||||
#
|
||||
#
|
||||
## 载入子仓库中的工具脚本
|
||||
#scripts=("shell/gen.sh" "shell/sql.sh" "shell/srv.sh" "shell/svn.sh")
|
||||
#for f in ${scripts[@]}; do
|
||||
# if [ ! -f ${ROOT}/${f} ]; then
|
||||
# continue
|
||||
# fi
|
||||
# source ${ROOT}/${f}
|
||||
#done
|
||||
#
|
||||
## 根据参数调用相应的命令
|
||||
#_CALL_FUNCTION $@
|
||||
@@ -0,0 +1,77 @@
|
||||
#!/usr/bin/env bash
|
||||
#-------------------------------------------------
|
||||
# 命令脚本
|
||||
# @author lwt
|
||||
#-------------------------------------------------
|
||||
# 生成启动脚本
|
||||
DOC[gen_start]="生成启动脚本"
|
||||
fun_gen_start(){
|
||||
INFO "执行命令:rebar3 auto_config compile"
|
||||
INFO "生成\e[92m启动脚本\e[0;0m..."
|
||||
cd ${ROOT}
|
||||
${REBAR} auto_config compile
|
||||
}
|
||||
|
||||
# 生成模板
|
||||
DOC[gen_mod]="生成功能模板,参数:功能名"
|
||||
fun_gen_mod(){
|
||||
INFO "执行命令:rebar3 gen_mod compile -m ${1}"
|
||||
INFO "生成\e[92m${1}\e[0;0m功能模板..."
|
||||
cd ${ROOT}
|
||||
${REBAR} gen_mod compile -m $1
|
||||
}
|
||||
|
||||
# 生成数据
|
||||
DOC[gen_data]="生成数据"
|
||||
fun_gen_data(){
|
||||
INFO "执行命令:rebar3 gen_data data -m ${1}"
|
||||
INFO "生成\e[92m${1}\e[0;0m数据..."
|
||||
${REBAR} gen_data data -m ${1}
|
||||
}
|
||||
|
||||
# 生成数据
|
||||
DOC[gen_cfg]="生成数据模板"
|
||||
fun_gen_cfg(){
|
||||
INFO "执行命令:rebar3 gen_data cfg -m ${1}"
|
||||
INFO "生成\e[92m${1}\e[0;0m数据模板..."
|
||||
${REBAR} gen_data cfg -m ${1}
|
||||
}
|
||||
|
||||
# 生成数据
|
||||
DOC[gen_tpl]="生成配置表"
|
||||
fun_gen_tpl(){
|
||||
INFO "执行命令:rebar3 gen_data tpl -m ${1}"
|
||||
INFO "生成\e[92m${1}\e[0;0m配置表..."
|
||||
${REBAR} gen_data tpl -m ${1}
|
||||
}
|
||||
|
||||
|
||||
|
||||
# 生成日志文件
|
||||
DOC[gen_tbllog]="生成日志文件"
|
||||
fun_gen_tbllog(){
|
||||
INFO "执行命令:rebar3 tbllog compile"
|
||||
INFO "生成日志文件..."
|
||||
${REBAR} tbllog compile
|
||||
}
|
||||
|
||||
# 生成协议文件
|
||||
DOC[gen_proto]="生成协议相关文件"
|
||||
fun_gen_proto(){
|
||||
INFO "执行命令:rebar3 protobuf compile -a ${DEF_SERVER}"
|
||||
INFO "正在生成协议相关文件..."
|
||||
${REBAR} protobuf clean -a ${DEF_SERVER}
|
||||
${REBAR} protobuf compile -a ${DEF_SERVER}
|
||||
}
|
||||
|
||||
# 生成数据文件
|
||||
DOC[gen_cache]="生成数据文件"
|
||||
fun_gen_cache(){
|
||||
INFO "执行命令:rebar3 cache compile"
|
||||
INFO "生成数据文件..."
|
||||
${REBAR} cache clean -a ${DEF_SERVER}
|
||||
${REBAR} cache compile
|
||||
${REBAR} tbllog clean -a ${DEF_SERVER}
|
||||
${REBAR} tbllog compile
|
||||
}
|
||||
|
||||
@@ -0,0 +1,81 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
useage() {
|
||||
echo "usage: $0 user passwd sql_path [infix] [host] [port] [login_db]"
|
||||
echo "user: 数据库用户名"
|
||||
echo "passwd: 数据库密码"
|
||||
echo "sql_path: 导入SQL文件路径"
|
||||
echo "infix: 数据库名中缀 默认:sql_path指定的SQL文件的数据库名"
|
||||
echo "host: 数据库IP地址 默认:${HOST}"
|
||||
echo "port: 数据库端口号 默认:${PORT}"
|
||||
echo "login_db: 登录服数据库 默认:${LOGIN_DB}"
|
||||
}
|
||||
|
||||
# 执行SQL命令
|
||||
excute() {
|
||||
CMD="mysql -u ${USER} -p${PASSWD} -h ${HOST} -P ${PORT} -v -e \"$1\""
|
||||
echo "执行: ${CMD}"
|
||||
eval "${CMD}"
|
||||
}
|
||||
|
||||
# 重建数据库
|
||||
rebuild() {
|
||||
excute "DROP DATABASE IF EXISTS ${GAME_DB};"
|
||||
excute "DROP DATABASE IF EXISTS ${LOG_DB};"
|
||||
excute "CREATE DATABASE IF NOT EXISTS ${GAME_DB};"
|
||||
excute "CREATE DATABASE IF NOT EXISTS ${LOG_DB};"
|
||||
}
|
||||
|
||||
# 导入数据库
|
||||
import_sql(){
|
||||
CMD="mysql -u ${USER} -p${PASSWD} -h ${HOST} -P ${PORT} ${GAME_DB} < ${SQL_PATH}"
|
||||
echo "执行: ${CMD}"
|
||||
|
||||
eval "${CMD}"
|
||||
}
|
||||
|
||||
# 插入玩家数据到登录数据库
|
||||
insert_account(){
|
||||
SQL="INSERT IGNORE INTO ${LOGIN_DB}.account_info SELECT CONCAT('0_', t.role_id), t.fn_name, '', t.register_time, 1, '#{}' FROM ${GAME_DB}.role t;"
|
||||
excute "${SQL}"
|
||||
}
|
||||
|
||||
# 修改游戏服角色信息
|
||||
update_role() {
|
||||
SQL="UPDATE ${GAME_DB}.role SET server_id=${SERVER_ID}, register_server_id=${SERVER_ID}, fn_platform=0;";
|
||||
excute "${SQL}"
|
||||
}
|
||||
|
||||
USER=$1
|
||||
PASSWD=$2
|
||||
SQL_PATH=$3
|
||||
|
||||
if [ -z "${USER}" ] || [ -z "${PASSWD}" ] || [ -z "${SQL_PATH}" ]; then
|
||||
useage
|
||||
else
|
||||
INFIX=${4:-$(basename ${SQL_PATH} | cut -d_ -f3- | cut -d. -f1)}
|
||||
|
||||
if [ -n "${INFIX}" ]; then
|
||||
HOST=${5:-localhost}
|
||||
PORT=${6:-3306}
|
||||
LOGIN_DB=${7:-ddxq_s900_trunk_login}
|
||||
|
||||
GAME_DB=ddxq_${INFIX}_game
|
||||
LOG_DB=ddxq_${INFIX}_log
|
||||
SERVER_ID=$(echo ${INFIX} | grep -o -E '[0-9]+')
|
||||
|
||||
echo "导入数据数据库: ${GAME_DB}"
|
||||
echo "服务器ID: ${SERVER_ID}"
|
||||
|
||||
rebuild
|
||||
import_sql
|
||||
update_role
|
||||
insert_account
|
||||
|
||||
echo "导入结束!"
|
||||
else
|
||||
echo "无法提取数据库中缀名,导入失败!"
|
||||
fi
|
||||
fi
|
||||
@@ -0,0 +1,92 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
useage() {
|
||||
echo "usage: $0 user passwd sql_path [infix] [host] [port] [login_db]"
|
||||
echo "user: 数据库用户名"
|
||||
echo "passwd: 数据库密码"
|
||||
echo "sql_path: 导入SQL文件路径"
|
||||
echo "infix: 数据库名中缀 默认:sql_path指定的SQL文件的数据库名"
|
||||
echo "host: 数据库IP地址 默认:${HOST}"
|
||||
echo "port: 数据库端口号 默认:${PORT}"
|
||||
echo "login_db: 登录服数据库 默认:${LOGIN_DB}"
|
||||
}
|
||||
|
||||
# 执行SQL命令
|
||||
excute() {
|
||||
CMD="mysql -u ${USER} -p${PASSWD} -h ${HOST} -P ${PORT} -v -e \"$1\""
|
||||
echo "执行: ${CMD}"
|
||||
eval "${CMD}"
|
||||
}
|
||||
|
||||
# 重建数据库
|
||||
rebuild() {
|
||||
if [ "${DB_TYPE}" != "log" ]; then
|
||||
excute "DROP DATABASE IF EXISTS ${GAME_DB};"
|
||||
excute "CREATE DATABASE IF NOT EXISTS ${GAME_DB};"
|
||||
else
|
||||
excute "DROP DATABASE IF EXISTS ${LOG_DB};"
|
||||
excute "CREATE DATABASE IF NOT EXISTS ${LOG_DB};"
|
||||
fi
|
||||
}
|
||||
|
||||
# 导入数据库
|
||||
import_sql(){
|
||||
if [ "${DB_TYPE}" != "log" ]; then
|
||||
ECUTE_DB=${GAME_DB}
|
||||
else
|
||||
ECUTE_DB=${LOG_DB}
|
||||
fi
|
||||
CMD="mysql -u ${USER} -p${PASSWD} -h ${HOST} -P ${PORT} ${ECUTE_DB} < ${SQL_PATH}"
|
||||
echo "执行: ${CMD}"
|
||||
eval "${CMD}"
|
||||
}
|
||||
|
||||
# 插入玩家数据到登录数据库
|
||||
insert_account(){
|
||||
SQL="INSERT IGNORE INTO ${LOGIN_DB}.account_info SELECT CONCAT('0_', t.role_id), t.fn_name, '', t.register_time, 1, '#{}' FROM ${GAME_DB}.role t;"
|
||||
excute "${SQL}"
|
||||
}
|
||||
|
||||
# 修改游戏服角色信息
|
||||
update_role() {
|
||||
SQL="UPDATE ${GAME_DB}.role SET server_id=${SERVER_ID}, register_server_id=${SERVER_ID}, fn_platform=0;";
|
||||
excute "${SQL}"
|
||||
}
|
||||
|
||||
USER=$1
|
||||
PASSWD=$2
|
||||
SQL_PATH=$3
|
||||
DB_TYPE=$4
|
||||
|
||||
if [ -z "${USER}" ] || [ -z "${PASSWD}" ] || [ -z "${SQL_PATH}" ]; then
|
||||
useage
|
||||
else
|
||||
INFIX=${5:-$(basename ${SQL_PATH} | cut -d_ -f3- | cut -d. -f1)}
|
||||
|
||||
if [ -n "${INFIX}" ]; then
|
||||
HOST=${6:-localhost}
|
||||
PORT=${7:-3306}
|
||||
LOGIN_DB=${8:-ddxq_s900_trunk_login}
|
||||
|
||||
GAME_DB=ddxq_${INFIX}_game
|
||||
LOG_DB=ddxq_${INFIX}_log
|
||||
SERVER_ID=$(echo ${INFIX} | grep -o -E '[0-9]+')
|
||||
|
||||
echo "导入数据数据库: ${GAME_DB}"
|
||||
echo "服务器ID: ${SERVER_ID}"
|
||||
|
||||
rebuild
|
||||
import_sql
|
||||
|
||||
if [ "${DB_TYPE}" != "log" ]; then
|
||||
insert_account
|
||||
update_role
|
||||
fi
|
||||
|
||||
echo "导入结束!"
|
||||
else
|
||||
echo "无法提取数据库中缀名,导入失败!"
|
||||
fi
|
||||
fi
|
||||
@@ -0,0 +1,59 @@
|
||||
#! /bin/bash
|
||||
|
||||
SERVER_DIR=/data/server/dhmmc
|
||||
|
||||
ROOT=`cd $(dirname $0);pwd`
|
||||
if [ -d ${ROOT} ]; then
|
||||
cd ${ROOT}
|
||||
fi
|
||||
|
||||
error() {
|
||||
echo -e "[错误] $(date '+%Y-%m-%d %H:%M:%S') $@"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# 打印信息
|
||||
echo2() {
|
||||
echo -e "[操作] $(date '+%Y-%m-%d %H:%M:%S') $@"
|
||||
}
|
||||
|
||||
cmd() {
|
||||
echo -e "[指令] $(date '+%Y-%m-%d %H:%M:%S') $@"
|
||||
}
|
||||
|
||||
cmd "========= sh ${SERVER_DIR}/login_server_s900/bin/login_server eval \"login_server_app:clear_server_db($1).\" ========="
|
||||
sh ${SERVER_DIR}/login_server_s900/bin/login_server eval "login_server_app:clear_server_db($1)."
|
||||
if [ $? -ne 0 ]; then
|
||||
error "关服删库失败,请检查"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cmd "========= sh ${SERVER_DIR}/login_server_s900/bin/login_server eval \"login_server_app:remove_server_data($1).\" ========="
|
||||
sh ${SERVER_DIR}/login_server_s900/bin/login_server eval "login_server_app:remove_server_data($1)."
|
||||
if [ $? -ne 0 ]; then
|
||||
error "清理登录服数据失败,请检查"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
case "$1" in
|
||||
"901")
|
||||
cmd "========= sh ${SERVER_DIR}/game_server_s901/bin/game_server daemon ========="
|
||||
sh ${SERVER_DIR}/game_server_s901/bin/game_server daemon
|
||||
;;
|
||||
"902")
|
||||
cmd "========= sh ${SERVER_DIR}/game_server_s902/bin/game_server daemon ========="
|
||||
sh ${SERVER_DIR}/game_server_s902/bin/game_server daemon
|
||||
;;
|
||||
*)
|
||||
echo2 "清档后请自行启动服务器"
|
||||
;;
|
||||
esac
|
||||
|
||||
#if [ $1 -eq 901 ]; then
|
||||
# cmd "========= rm -rf ${SERVER_DIR}/game_server_s901/dets ========="
|
||||
# rm -rf ${SERVER_DIR}/game_server_s901/dets
|
||||
# cmd "========= sh ${SERVER_DIR}/game_server_s901/bin/game_server daemon ========="
|
||||
# sh ${SERVER_DIR}/game_server_s901/bin/game_server daemon
|
||||
#fi
|
||||
|
||||
echo2 "$1服 清档成功......"
|
||||
@@ -0,0 +1,419 @@
|
||||
#! /bin/bash
|
||||
|
||||
export PATH=$PATH:/usr/local/bin
|
||||
#export LANG=zh_CN.UTF-8
|
||||
#英文utf8编码格式
|
||||
export LANG=en_US.UTF-8
|
||||
|
||||
ROOT=`cd $(dirname $0);pwd`
|
||||
if [ -d ${ROOT} ]; then
|
||||
cd ${ROOT}
|
||||
fi
|
||||
|
||||
ARGS=""
|
||||
|
||||
## 项目组自定义路径
|
||||
# ====================================================================================
|
||||
|
||||
# 服务器svn根目录
|
||||
SVN_BASE_URL=http://yfzx.4399svn.com/svn/dhmmc
|
||||
# 发版根目录 运维的目录规范 /data/xxx/server
|
||||
PUB_ROOT=/data/dhmmc/server
|
||||
# 发版脚本 运维的规范 xxxpub
|
||||
PUB_CMD=dhmmcpub
|
||||
|
||||
# svn账号密码
|
||||
USER=client_publisher
|
||||
PASSWORD=`cat /home/admin/svn_pub_pass`
|
||||
|
||||
# 代码checkout的临时目录,编译用
|
||||
TMP_SOURCE=/data/tmp_server/dhmmc
|
||||
|
||||
# 内网部署路径
|
||||
SERVER_DIR=/data/server/dhmmc
|
||||
|
||||
# 内网主干登录服目录(内网重启和热更时指定的登录服)
|
||||
LOGIN_SERVER=login_server
|
||||
|
||||
# 内网主干游戏服目录(内网重启和热更时指定的游戏服)
|
||||
GAME_SERVER=game_server
|
||||
|
||||
# 内网发版指定的机器人压测脚本
|
||||
CLIENT_SERVER=client_server
|
||||
|
||||
# ====================================================================================
|
||||
# 分支版本号,默认是用主干的代码
|
||||
TAG=trunk
|
||||
VER=dev
|
||||
PLAT=android_cn
|
||||
PUSH_LANG=CN
|
||||
REBAR=rebar3
|
||||
|
||||
error() {
|
||||
echo -e "[错误] $(date '+%Y-%m-%d %H:%M:%S') $@"
|
||||
}
|
||||
|
||||
# 打印警告
|
||||
warn() {
|
||||
echo -e "[警告] $(date '+%Y-%m-%d %H:%M:%S') $@"
|
||||
}
|
||||
|
||||
# 打印信息
|
||||
opt() {
|
||||
echo -e "[操作] $(date '+%Y-%m-%d %H:%M:%S') $@"
|
||||
}
|
||||
|
||||
cmd() {
|
||||
echo -e "[指令] $(date '+%Y-%m-%d %H:%M:%S') $@"
|
||||
}
|
||||
|
||||
exit1() {
|
||||
lock_release
|
||||
exit 1
|
||||
}
|
||||
|
||||
|
||||
# 检查锁
|
||||
lock_check(){
|
||||
local task=$1
|
||||
lock=/tmp/server_shell.lock
|
||||
if [ -f $lock ]; then
|
||||
error "正在执行其他任务..., 如确认没有其他任务在执行,请删除文件${lock}"
|
||||
exit 1
|
||||
fi
|
||||
touch $lock # 加锁
|
||||
echo $task > $lock
|
||||
}
|
||||
|
||||
# 解锁
|
||||
lock_release(){
|
||||
local task=$1
|
||||
lock=/tmp/server_shell.lock
|
||||
rm -f $lock
|
||||
}
|
||||
|
||||
|
||||
|
||||
# 使用说明
|
||||
Usage ()
|
||||
{
|
||||
echo "说明:"
|
||||
echo "当前路径:${ROOT}"
|
||||
echo "用法:"
|
||||
echo "动作 [选项]"
|
||||
echo "动作:"
|
||||
echo " reboot 重新部署,重启内网测试服"
|
||||
echo " reload 热更内网测试服"
|
||||
echo " pub_rel 发布全量包"
|
||||
echo " pub_up 发布升级包"
|
||||
echo ""
|
||||
echo "选项:"
|
||||
echo " -h, --help 显示本信息"
|
||||
echo " -v, --ver dev|beta|stable 推送的版本"
|
||||
echo " -t, --tag 游戏分支版本号"
|
||||
echo " -p, --plat android_cn|ios_cn|mix_cn 推送的平台"
|
||||
echo " -l, --lang CN | TW 推送的语言"
|
||||
echo " -s, --server game_server|login_server 推送的服务器类型"
|
||||
echo " -si, --server_id 重启/更新 的内网服务器id"
|
||||
echo " -m, --modules 热更的模块列表,不传或传空表示热更所有变更的模块"
|
||||
|
||||
echo ""
|
||||
}
|
||||
|
||||
##从svn下载对应的代码,并设置当前版本号
|
||||
SvnUpdate ()
|
||||
{
|
||||
# 使用中文utf8编码,避免中文名文件等导致admin执行命令终止
|
||||
export LANG=zh_CN.UTF-8
|
||||
|
||||
if [ -d ${TMP_SOURCE} ]; then
|
||||
opt "${TMP_SOURCE} 目录已存在,svn update"
|
||||
cmd "========= svn up --non-interactive --force --accept tc ${TMP_SOURCE} --username ${USER} ========="
|
||||
svn up --non-interactive --force --accept tc ${TMP_SOURCE} --username ${USER} --password ${PASSWORD}
|
||||
else
|
||||
opt "${TMP_SOURCE} 目录不存在,创建并svn checkout"
|
||||
cmd "========= svn co --non-interactive ${SVN_BASE_URL} ${TMP_SOURCE} --username ${USER} ========="
|
||||
mkdir -p ${TMP_SOURCE}
|
||||
svn co --non-interactive ${SVN_BASE_URL} ${TMP_SOURCE} --username ${USER} --password ${PASSWORD}
|
||||
fi
|
||||
# svn更新后使用英文utf8编码,
|
||||
# svn info取Last Changed Rev需要用到英文编码 / rebar3插件rebar3_vsn_plugin改每个app的版本也是用svn info取Last Changed Rev
|
||||
# 如果用中文utf8编码需要改这些用到svn取值的地方
|
||||
export LANG=en_US.UTF-8
|
||||
|
||||
# 删除.dag文件,dag文件过大导致编译极慢
|
||||
# cmd "========= find ${TMP_SOURCE}/ -name \"*.dag\" | xargs rm -f ========="
|
||||
# find ${TMP_SOURCE}/ -name "*.dag" | xargs rm -f
|
||||
|
||||
cd ${ROOT}
|
||||
}
|
||||
|
||||
## 生成全量包
|
||||
Release ()
|
||||
{
|
||||
# if [ ! -d ${PUB_ROOT} ]; then
|
||||
# mkdir -p ${PUB_ROOT}
|
||||
# fi
|
||||
|
||||
cd ${TMP_SOURCE} || exit1
|
||||
|
||||
REL_VERSION=`svn info ${TMP_SOURCE} | grep 'Last Changed Rev: ' | cut -d' ' -f4`
|
||||
|
||||
cmd "========= ${REBAR} as ${SERVER_TYPE} release ========="
|
||||
${REBAR} as ${SERVER_TYPE} release || exit1
|
||||
|
||||
# 删除旧代码
|
||||
cmd "========= rm -rf ${PUB_ROOT} ========="
|
||||
rm -rf ${PUB_ROOT}
|
||||
|
||||
PRJ=${TMP_SOURCE}/_build/${SERVER_TYPE}/rel/${SERVER_TYPE}
|
||||
# 记录svn版本号
|
||||
cmd "========= echo ${REL_VERSION} > ${PRJ}/releases/svn_version ========="
|
||||
echo ${REL_VERSION} > ${PRJ}/releases/svn_version
|
||||
# 记录游戏服的版本
|
||||
cmd "========= echo ${TAG} > ${PRJ}/version.txt ========="
|
||||
echo ${TAG} > ${PRJ}/version.txt
|
||||
# 拷贝console.sh脚本到bin目录
|
||||
cmd "========= cp shell/console.sh ${PRJ}/bin/console.sh ========="
|
||||
cp shell/console.sh ${PRJ}/bin/console.sh
|
||||
sed -i "s/game_server/${SERVER_TYPE}/g" "${PRJ}/bin/console.sh"
|
||||
if [ "${SERVER_TYPE}" = "${CLIENT_SERVER}" ]; then
|
||||
sed -i "s/remote_console/console/g" "${PRJ}/bin/console.sh"
|
||||
fi
|
||||
# 拷贝新代码到发版目录
|
||||
cmd "========= rsync --exclude=".svn" --delete-before -a -H -v ${PRJ}/ ${PUB_ROOT}/ ========="
|
||||
rsync --exclude=".svn" --delete-before -a -H -v ${PRJ}/ ${PUB_ROOT}/ || exit1
|
||||
|
||||
cd ${ROOT}
|
||||
}
|
||||
|
||||
## 生成热更包
|
||||
Update ()
|
||||
{
|
||||
# if [ ! -d ${PUB_ROOT} ]; then
|
||||
# mkdir -p ${PUB_ROOT}
|
||||
# fi
|
||||
|
||||
cd ${TMP_SOURCE} || exit1
|
||||
|
||||
REL_VERSION=`svn info ${TMP_SOURCE} | grep 'Last Changed Rev: ' | cut -d' ' -f4`
|
||||
|
||||
cmd "========= ${REBAR} as ${SERVER_TYPE} release ========="
|
||||
${REBAR} as ${SERVER_TYPE} release || exit1
|
||||
|
||||
# 同步热更的代码和sql语句
|
||||
PRJ=${TMP_SOURCE}/_build/${SERVER_TYPE}/rel/${SERVER_TYPE}
|
||||
cmd "========= rsync --exclude=".svn" --delete-before -a -H -v ${PRJ}/lib/ ${PUB_ROOT}/lib/ ========="
|
||||
rsync --exclude=".svn" --delete-before -a -H -v ${PRJ}/lib/ ${PUB_ROOT}/lib/ || exit1
|
||||
if [ -d ${PRJ}/sql ]; then
|
||||
cmd "========= rsync --exclude=".svn" --delete-before -a -H -v ${PRJ}/sql/ ${PUB_ROOT}/sql/ ========="
|
||||
rsync --exclude=".svn" --delete-before -a -H -v ${PRJ}/sql/ ${PUB_ROOT}/sql/ || exit1
|
||||
fi
|
||||
|
||||
# 记录svn版本号
|
||||
cmd "========= echo ${REL_VERSION} > ${PRJ}/releases/svn_version ========="
|
||||
echo ${REL_VERSION} > ${PRJ}/releases/svn_version
|
||||
|
||||
cd ${ROOT}
|
||||
}
|
||||
|
||||
PubUpdate ()
|
||||
{
|
||||
SvnUpdate
|
||||
|
||||
Update
|
||||
|
||||
cmd "========= sh ${PUB_CMD} server ${PUSH_LANG} ${VER} ${PLAT} ========="
|
||||
sh ${PUB_CMD} server ${PUSH_LANG} ${VER} ${PLAT}
|
||||
|
||||
cd ${ROOT}
|
||||
}
|
||||
|
||||
# 发布代码
|
||||
PubRelease()
|
||||
{
|
||||
opt "推送${VER}版本${SERVER_TYPE}全量包到外网"
|
||||
|
||||
SvnUpdate
|
||||
|
||||
cd ${TMP_SOURCE} || exit1
|
||||
|
||||
# 删除beam文件重新编译
|
||||
cmd "========= ${REBAR} as ${SERVER_TYPE} clean ========="
|
||||
${REBAR} as ${SERVER_TYPE} clean || exit1
|
||||
|
||||
cd ${ROOT}
|
||||
|
||||
Release
|
||||
|
||||
cmd "========= sh ${PUB_CMD} server ${PUSH_LANG} ${VER} ${PLAT} ========="
|
||||
sh ${PUB_CMD} server ${PUSH_LANG} ${VER} ${PLAT}
|
||||
|
||||
cd ${ROOT}
|
||||
}
|
||||
|
||||
Reboot(){
|
||||
opt "更新重启${VER}版本${SERVER_TYPE}"
|
||||
|
||||
if [ "${SERVER_ID}" = "" ]; then
|
||||
Usage
|
||||
error "需要指定服务器Id -si 参数"
|
||||
exit1
|
||||
fi
|
||||
|
||||
BIN_DIR=${SERVER_DIR}/${SERVER_TYPE}_s${SERVER_ID}/bin
|
||||
PUB_ROOT=${SERVER_DIR}/${SERVER_TYPE}_s${SERVER_ID}
|
||||
CONFIG_DIR=${SERVER_DIR}/config/${SERVER_TYPE}_s${SERVER_ID}
|
||||
|
||||
SvnUpdate
|
||||
|
||||
# 停服
|
||||
cmd "========= sh ${BIN_DIR}/${SERVER_TYPE} stop ========="
|
||||
sh ${BIN_DIR}/${SERVER_TYPE} stop
|
||||
|
||||
# 备份
|
||||
cmd "========= rm -rf ${PUB_ROOT}_old ========="
|
||||
rm -rf ${PUB_ROOT}_old
|
||||
cmd "========= rm -rf ${PUB_ROOT}/*.dump ========="
|
||||
rm -rf ${PUB_ROOT}/*.dump
|
||||
cmd "========= mv ${PUB_ROOT} ${PUB_ROOT}_old ========="
|
||||
mv ${PUB_ROOT} ${PUB_ROOT}_old
|
||||
|
||||
Release
|
||||
|
||||
# 替换配置
|
||||
cmd "========= cp ${CONFIG_DIR}/sys.config ${PUB_ROOT}/sys.config ========="
|
||||
cp ${CONFIG_DIR}/sys.config ${PUB_ROOT}/sys.config
|
||||
|
||||
cmd "========= cp ${CONFIG_DIR}/vm.args ${PUB_ROOT}/vm.args ========="
|
||||
cp ${CONFIG_DIR}/vm.args ${PUB_ROOT}/vm.args
|
||||
|
||||
# 把备份的日志拷贝回来,防止历史日志删除后查找不到问题
|
||||
cmd "========= cp -r ${PUB_ROOT}_old/log ${PUB_ROOT}/log ========="
|
||||
cp -r ${PUB_ROOT}_old/log ${PUB_ROOT}/log
|
||||
|
||||
# 启动服务器
|
||||
cmd "========= sh ${BIN_DIR}/${SERVER_TYPE} daemon ========="
|
||||
# sh ${BIN_DIR}/${SERVER_TYPE} daemon
|
||||
CODE_LOADING_MODE=interactive sh ${BIN_DIR}/${SERVER_TYPE} daemon
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
error "启动服务器失败,请检查"
|
||||
exit1
|
||||
fi
|
||||
|
||||
opt "重启服务器成功......"
|
||||
|
||||
cd ${ROOT}
|
||||
|
||||
}
|
||||
|
||||
Reload(){
|
||||
opt "热更${VER}版本${SERVER_TYPE}"
|
||||
|
||||
if [ "${SERVER_ID}" = "" ]; then
|
||||
Usage
|
||||
error "需要指定服务器Id -si 参数"
|
||||
exit1
|
||||
fi
|
||||
|
||||
BIN_DIR=${SERVER_DIR}/${SERVER_TYPE}_s${SERVER_ID}/bin
|
||||
PUB_ROOT=${SERVER_DIR}/${SERVER_TYPE}_s${SERVER_ID}
|
||||
CONFIG_DIR=${SERVER_DIR}/config/${SERVER_TYPE}_s${SERVER_ID}
|
||||
|
||||
SvnUpdate
|
||||
|
||||
Update
|
||||
|
||||
if [ "${MODULES}" = "" ]; then
|
||||
cmd "========= sh ${BIN_DIR}/${SERVER_TYPE} eval \"reloader:reload_modules().\" ========="
|
||||
RET=`sh ${BIN_DIR}/${SERVER_TYPE} eval "reloader:reload_modules()."`
|
||||
# 全量更新修改svn版本号
|
||||
cmd "========= cp -rf ${PRJ}/releases/svn_version ${SERVER_DIR}/${SERVER_TYPE}_s${SERVER_ID}/releases/svn_version ========="
|
||||
cp -rf ${PRJ}/releases/svn_version ${SERVER_DIR}/${SERVER_TYPE}_s${SERVER_ID}/releases/svn_version
|
||||
else
|
||||
cmd "========= sh ${BIN_DIR}/${SERVER_TYPE} eval \"reloader:reload_modules([${MODULES}]).\" ========="
|
||||
RET=`sh ${BIN_DIR}/${SERVER_TYPE} eval "reloader:reload_modules([${MODULES}])."`
|
||||
fi
|
||||
|
||||
# if [ $? -ne 0 ]; then
|
||||
if [ "${RET}" != "ok" ]; then
|
||||
error "热更服务器失败,请检查"
|
||||
exit1
|
||||
fi
|
||||
|
||||
opt "热更服务器成功......"
|
||||
|
||||
cd ${ROOT}
|
||||
|
||||
}
|
||||
|
||||
IsRun(){
|
||||
RUN_PROC_CNT=`ps -ef | grep server.sh | grep -v grep | grep -v vi | wc -l`
|
||||
if [ ${RUN_PROC_CNT} -gt 2 ]; then
|
||||
opt "run proc cnt = ${RUN_PROC_CNT}"
|
||||
error "其他人正在运行中"
|
||||
exit1
|
||||
fi
|
||||
}
|
||||
|
||||
START_TIME=$(date '+%Y-%m-%d %H:%M:%S')
|
||||
|
||||
lock_check
|
||||
|
||||
# parse command line parameters
|
||||
while [ $# -ne 0 ] ; do
|
||||
PARAM=$1
|
||||
shift
|
||||
case $PARAM in
|
||||
--) break ;;
|
||||
--help|-h) Usage; exit 0 ;;
|
||||
--server|-s) SERVER_TYPE=$1; shift ;;
|
||||
--ver|-v) VER=$1; shift ;;
|
||||
--plat|-p) PLAT=$1; shift ;;
|
||||
--lang|-l) PUSH_LANG=$1; shift ;;
|
||||
--tag|-t) TAG=$1; shift ;;
|
||||
--server_id|-si) SERVER_ID=$1; shift ;;
|
||||
--modules|-m) MODULES=$1; shift ;;
|
||||
*) ARGS="$ARGS $PARAM" ;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [ "${SERVER_TYPE}" = "" ]; then
|
||||
Usage
|
||||
error "需要指定服务器类型 -s 参数"
|
||||
exit1
|
||||
fi
|
||||
|
||||
#if [ ${TAG} != 'trunk' ]; then
|
||||
# TAG=branches/${TAG}
|
||||
#fi
|
||||
|
||||
# svn目录
|
||||
SVN_BASE_URL=${SVN_BASE_URL}/${TAG}/server
|
||||
# 发布目录
|
||||
PUB_ROOT=${PUB_ROOT}/${PUSH_LANG}/${VER}/${PLAT}/${SERVER_TYPE}
|
||||
# 代码临时编译目录
|
||||
TMP_SOURCE=${TMP_SOURCE}/${PUSH_LANG}/${TAG}
|
||||
|
||||
#先确定更新的服务器类型
|
||||
#确定最终发布路径
|
||||
opt "ver=${VER} server=${SERVER_TYPE} root =${PUB_ROOT} tmp_source=${TMP_SOURCE}"
|
||||
|
||||
set -- $ARGS
|
||||
ACTION=$1
|
||||
shift
|
||||
|
||||
case ${ACTION} in
|
||||
'reboot') Reboot ;;
|
||||
'reload') Reload ;;
|
||||
'pub_rel') PubRelease ;;
|
||||
'pub_up') PubUpdate ;;
|
||||
*) Usage ; exit1;;
|
||||
esac
|
||||
|
||||
lock_release
|
||||
|
||||
END_TIME=$(date '+%Y-%m-%d %H:%M:%S')
|
||||
|
||||
echo -e "start_time = ${START_TIME}, end_time = ${END_TIME}"
|
||||
@@ -0,0 +1,348 @@
|
||||
#! /bin/bash
|
||||
|
||||
export PATH=$PATH:/usr/local/bin
|
||||
#export LANG=zh_CN.UTF-8
|
||||
#英文utf8编码格式
|
||||
export LANG=en_US.UTF-8
|
||||
|
||||
ROOT=`cd $(dirname $0);pwd`
|
||||
if [ -d ${ROOT} ]; then
|
||||
cd ${ROOT}
|
||||
fi
|
||||
|
||||
ARGS=""
|
||||
|
||||
## 项目组自定义路径
|
||||
# ====================================================================================
|
||||
|
||||
# 服务器svn根目录
|
||||
SVN_BASE_URL=http://yfzx.4399svn.com/svn/dhmmc
|
||||
# 发版根目录 运维的目录规范 /data/xxx/server
|
||||
PUB_ROOT=/data/dhmmc/server
|
||||
# 发版脚本 运维的规范 xxxpub
|
||||
PUB_CMD=dhmmcpub
|
||||
|
||||
# svn账号密码
|
||||
USER=client_publisher
|
||||
PASSWORD=`cat /home/admin/svn_pub_pass`
|
||||
|
||||
# 代码checkout的临时目录,编译用
|
||||
TMP_SOURCE=/data/tmp_server/dhmmc
|
||||
|
||||
# 内网部署路径
|
||||
SERVER_DIR=/data/server/dhmmc
|
||||
|
||||
# 内网主干登录服目录(内网重启和热更时指定的登录服)
|
||||
LOGIN_SERVER=login_server
|
||||
|
||||
# 内网主干游戏服目录(内网重启和热更时指定的游戏服)
|
||||
GAME_SERVER=game_server
|
||||
|
||||
# 内网发版指定的机器人压测脚本
|
||||
CLIENT_SERVER=client_server
|
||||
|
||||
# ====================================================================================
|
||||
# 分支版本号,默认是用主干的代码
|
||||
TAG=trunk
|
||||
VER=dev
|
||||
PLAT=android_cn
|
||||
PUSH_LANG=CN
|
||||
REBAR=rebar3
|
||||
|
||||
error() {
|
||||
echo -e "[错误] $(date '+%Y-%m-%d %H:%M:%S') $@"
|
||||
}
|
||||
|
||||
# 打印警告
|
||||
warn() {
|
||||
echo -e "[警告] $(date '+%Y-%m-%d %H:%M:%S') $@"
|
||||
}
|
||||
|
||||
# 打印信息
|
||||
opt() {
|
||||
echo -e "[操作] $(date '+%Y-%m-%d %H:%M:%S') $@"
|
||||
}
|
||||
|
||||
cmd() {
|
||||
echo -e "[指令] $(date '+%Y-%m-%d %H:%M:%S') $@"
|
||||
}
|
||||
|
||||
exit1() {
|
||||
lock_release
|
||||
exit 1
|
||||
}
|
||||
|
||||
|
||||
# 检查锁
|
||||
lock_check(){
|
||||
local task=$1
|
||||
lock=/tmp/server_shell_pub.lock
|
||||
if [ -f $lock ]; then
|
||||
error "正在执行其他任务..., 如确认没有其他任务在执行,请删除文件${lock}"
|
||||
exit 1
|
||||
fi
|
||||
touch $lock # 加锁
|
||||
echo $task > $lock
|
||||
}
|
||||
|
||||
# 解锁
|
||||
lock_release(){
|
||||
local task=$1
|
||||
lock=/tmp/server_shell_pub.lock
|
||||
rm -f $lock
|
||||
}
|
||||
|
||||
|
||||
|
||||
# 使用说明
|
||||
Usage ()
|
||||
{
|
||||
echo "说明:"
|
||||
echo "当前路径:${ROOT}"
|
||||
echo "用法:"
|
||||
echo "动作 [选项]"
|
||||
echo "动作:"
|
||||
echo " pub_rel 发布全量包"
|
||||
echo " pub_up 发布升级包"
|
||||
echo ""
|
||||
echo "选项:"
|
||||
echo " -h, --help 显示本信息"
|
||||
echo " -v, --ver dev|beta|stable 推送的版本"
|
||||
echo " -t, --tag 游戏分支版本号"
|
||||
echo " -p, --plat android_cn|ios_cn|mix_cn 推送的平台"
|
||||
echo " -l, --lang CN | TW 推送的语言"
|
||||
echo " -s, --server game_server|login_server 推送的服务器类型"
|
||||
echo " -si, --server_id 重启/更新 的内网服务器id"
|
||||
echo " -m, --modules 热更的模块列表,不传或传空表示热更所有变更的模块"
|
||||
|
||||
echo ""
|
||||
}
|
||||
|
||||
##从svn下载对应的代码,并设置当前版本号
|
||||
SvnUpdate ()
|
||||
{
|
||||
# 使用中文utf8编码,避免中文名文件等导致admin执行命令终止
|
||||
export LANG=zh_CN.UTF-8
|
||||
|
||||
if [ -d ${TMP_SOURCE} ]; then
|
||||
opt "${TMP_SOURCE} 目录已存在,svn update"
|
||||
cmd "========= svn up --non-interactive --force --accept tc ${TMP_SOURCE} --username ${USER} ========="
|
||||
svn up --non-interactive --force --accept tc ${TMP_SOURCE} --username ${USER} --password ${PASSWORD}
|
||||
else
|
||||
opt "${TMP_SOURCE} 目录不存在,创建并svn checkout"
|
||||
cmd "========= svn co --non-interactive ${SVN_BASE_URL} ${TMP_SOURCE} --username ${USER} ========="
|
||||
mkdir -p ${TMP_SOURCE}
|
||||
svn co --non-interactive ${SVN_BASE_URL} ${TMP_SOURCE} --username ${USER} --password ${PASSWORD}
|
||||
fi
|
||||
# svn更新后使用英文utf8编码,
|
||||
# svn info取Last Changed Rev需要用到英文编码 / rebar3插件rebar3_vsn_plugin改每个app的版本也是用svn info取Last Changed Rev
|
||||
# 如果用中文utf8编码需要改这些用到svn取值的地方
|
||||
export LANG=en_US.UTF-8
|
||||
|
||||
cd ${ROOT}
|
||||
}
|
||||
|
||||
## 生成全量包
|
||||
Release ()
|
||||
{
|
||||
if [ ! -d ${PUB_ROOT} ]; then
|
||||
mkdir -p ${PUB_ROOT}
|
||||
fi
|
||||
|
||||
cd ${TMP_SOURCE} || exit1
|
||||
|
||||
REL_VERSION=`svn info ${TMP_SOURCE} | grep 'Last Changed Rev: ' | cut -d' ' -f4`
|
||||
|
||||
# 复制配置表,修改编译选项
|
||||
if [ "${VER}" != "dev" ]; then
|
||||
cmd "========= sed -i \"s/% {d, 'EXTERNAL'}/{d, 'EXTERNAL'}/g\" ${TMP_SOURCE}/rebar.config ========="
|
||||
sed -i "s/% {d, 'EXTERNAL'}/{d, 'EXTERNAL'}/g" ${TMP_SOURCE}/rebar.config
|
||||
fi
|
||||
|
||||
cmd "========= ${REBAR} as ${SERVER_TYPE} release ========="
|
||||
${REBAR} as ${SERVER_TYPE} release || exit1
|
||||
|
||||
if [ "${VER}" != "dev" ]; then
|
||||
# 这里拷贝只是为了确认是否修改成功
|
||||
cmd "========= rm -rf ${TMP_SOURCE}/rebar.config.release ========="
|
||||
rm -rf ${TMP_SOURCE}/rebar.config.release
|
||||
cmd "========= cp ${TMP_SOURCE}/rebar.config ${TMP_SOURCE}/rebar.config.release ========="
|
||||
cp ${TMP_SOURCE}/rebar.config ${TMP_SOURCE}/rebar.config.release
|
||||
cmd "========= sed -i \"s/{d, 'EXTERNAL'}/% {d, 'EXTERNAL'}/g\" ${TMP_SOURCE}/rebar.config ========="
|
||||
sed -i "s/{d, 'EXTERNAL'}/% {d, 'EXTERNAL'}/g" ${TMP_SOURCE}/rebar.config
|
||||
fi
|
||||
|
||||
# 删除旧代码
|
||||
cmd "========= rm -rf ${PUB_ROOT} ========="
|
||||
rm -rf ${PUB_ROOT}
|
||||
|
||||
PRJ=${TMP_SOURCE}/_build/${SERVER_TYPE}/rel/${SERVER_TYPE}
|
||||
# 记录svn版本号
|
||||
cmd "========= echo ${REL_VERSION} > ${PRJ}/releases/svn_version ========="
|
||||
echo ${REL_VERSION} > ${PRJ}/releases/svn_version
|
||||
# 记录游戏服的版本
|
||||
cmd "========= echo ${TAG} > ${PRJ}/version.txt ========="
|
||||
echo ${TAG} > ${PRJ}/version.txt
|
||||
# 拷贝console.sh脚本到bin目录
|
||||
cmd "========= cp shell/console.sh ${PRJ}/bin/console.sh ========="
|
||||
cp shell/console.sh ${PRJ}/bin/console.sh
|
||||
sed -i "s/game_server/${SERVER_TYPE}/g" "${PRJ}/bin/console.sh"
|
||||
if [ "${SERVER_TYPE}" = "${CLIENT_SERVER}" ]; then
|
||||
sed -i "s/remote_console/console/g" "${PRJ}/bin/console.sh"
|
||||
fi
|
||||
# 拷贝新代码到发版目录
|
||||
cmd "========= rsync --exclude=".svn" --delete-before -a -H -v ${PRJ}/ ${PUB_ROOT}/ ========="
|
||||
rsync --exclude=".svn" --delete-before -a -H -v ${PRJ}/ ${PUB_ROOT}/ || exit1
|
||||
|
||||
cd ${ROOT}
|
||||
}
|
||||
|
||||
## 生成热更包
|
||||
Update ()
|
||||
{
|
||||
if [ ! -d ${PUB_ROOT} ]; then
|
||||
mkdir -p ${PUB_ROOT}
|
||||
fi
|
||||
|
||||
cd ${TMP_SOURCE} || exit1
|
||||
|
||||
REL_VERSION=`svn info ${TMP_SOURCE} | grep 'Last Changed Rev: ' | cut -d' ' -f4`
|
||||
|
||||
# 复制配置表,修改编译选项
|
||||
if [ "${VER}" != "dev" ]; then
|
||||
cmd "========= sed -i \"s/% {d, 'EXTERNAL'}/{d, 'EXTERNAL'}/g\" ${TMP_SOURCE}/rebar.config ========="
|
||||
sed -i "s/% {d, 'EXTERNAL'}/{d, 'EXTERNAL'}/g" ${TMP_SOURCE}/rebar.config
|
||||
fi
|
||||
|
||||
cmd "========= ${REBAR} as ${SERVER_TYPE} release ========="
|
||||
${REBAR} as ${SERVER_TYPE} release || exit1
|
||||
|
||||
if [ "${VER}" != "dev" ]; then
|
||||
# 这里拷贝只是为了确认是否修改成功
|
||||
cmd "========= rm -rf ${TMP_SOURCE}/rebar.config.release ========="
|
||||
rm -rf ${TMP_SOURCE}/rebar.config.release
|
||||
cmd "========= cp ${TMP_SOURCE}/rebar.config ${TMP_SOURCE}/rebar.config.release ========="
|
||||
cp ${TMP_SOURCE}/rebar.config ${TMP_SOURCE}/rebar.config.release
|
||||
cmd "========= sed -i \"s/{d, 'EXTERNAL'}/% {d, 'EXTERNAL'}/g\" ${TMP_SOURCE}/rebar.config ========="
|
||||
sed -i "s/{d, 'EXTERNAL'}/% {d, 'EXTERNAL'}/g" ${TMP_SOURCE}/rebar.config
|
||||
fi
|
||||
|
||||
# 同步热更的代码和sql语句
|
||||
PRJ=${TMP_SOURCE}/_build/${SERVER_TYPE}/rel/${SERVER_TYPE}
|
||||
cmd "========= rsync --exclude=".svn" --delete-before -a -H -v ${PRJ}/lib/ ${PUB_ROOT}/lib/ ========="
|
||||
rsync --exclude=".svn" --delete-before -a -H -v ${PRJ}/lib/ ${PUB_ROOT}/lib/ || exit1
|
||||
|
||||
if [ -d ${PRJ}/sql ]; then
|
||||
cmd "========= rsync --exclude=".svn" --delete-before -a -H -v ${PRJ}/sql/ ${PUB_ROOT}/sql/ ========="
|
||||
rsync --exclude=".svn" --delete-before -a -H -v ${PRJ}/sql/ ${PUB_ROOT}/sql/ || exit1
|
||||
fi
|
||||
|
||||
# 记录svn版本号
|
||||
cmd "========= echo ${REL_VERSION} > ${PRJ}/releases/svn_version ========="
|
||||
echo ${REL_VERSION} > ${PRJ}/releases/svn_version
|
||||
|
||||
cd ${ROOT}
|
||||
}
|
||||
|
||||
PubUpdate ()
|
||||
{
|
||||
SvnUpdate
|
||||
|
||||
Update
|
||||
|
||||
cmd "========= sh ${PUB_CMD} server ${PUSH_LANG} ${VER} ${PLAT} ========="
|
||||
sh ${PUB_CMD} server ${PUSH_LANG} ${VER} ${PLAT}
|
||||
|
||||
cd ${ROOT}
|
||||
}
|
||||
|
||||
# 发布代码
|
||||
PubRelease()
|
||||
{
|
||||
opt "推送${VER}版本${SERVER_TYPE}全量包到外网"
|
||||
|
||||
SvnUpdate
|
||||
|
||||
cd ${TMP_SOURCE} || exit1
|
||||
|
||||
# 删除beam文件重新编译
|
||||
cmd "========= ${REBAR} as ${SERVER_TYPE} clean ========="
|
||||
${REBAR} as ${SERVER_TYPE} clean || exit1
|
||||
|
||||
cd ${ROOT}
|
||||
|
||||
Release
|
||||
|
||||
cmd "========= sh ${PUB_CMD} server ${PUSH_LANG} ${VER} ${PLAT} ========="
|
||||
sh ${PUB_CMD} server ${PUSH_LANG} ${VER} ${PLAT}
|
||||
|
||||
cd ${ROOT}
|
||||
}
|
||||
|
||||
IsRun(){
|
||||
RUN_PROC_CNT=`ps -ef | grep server_pub.sh | grep -v grep | grep -v vi | wc -l`
|
||||
if [ ${RUN_PROC_CNT} -gt 2 ]; then
|
||||
opt "run proc cnt = ${RUN_PROC_CNT}"
|
||||
error "其他人正在运行中"
|
||||
exit1
|
||||
fi
|
||||
}
|
||||
|
||||
START_TIME=$(date '+%Y-%m-%d %H:%M:%S')
|
||||
|
||||
lock_check
|
||||
|
||||
# parse command line parameters
|
||||
while [ $# -ne 0 ] ; do
|
||||
PARAM=$1
|
||||
shift
|
||||
case $PARAM in
|
||||
--) break ;;
|
||||
--help|-h) Usage; exit 0 ;;
|
||||
--server|-s) SERVER_TYPE=$1; shift ;;
|
||||
--ver|-v) VER=$1; shift ;;
|
||||
--plat|-p) PLAT=$1; shift ;;
|
||||
--lang|-l) PUSH_LANG=$1; shift ;;
|
||||
--tag|-t) TAG=$1; shift ;;
|
||||
--server_id|-si) SERVER_ID=$1; shift ;;
|
||||
--modules|-m) MODULES=$1; shift ;;
|
||||
*) ARGS="$ARGS $PARAM" ;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [ "${SERVER_TYPE}" = "" ]; then
|
||||
Usage
|
||||
error "需要指定服务器类型 -s 参数"
|
||||
exit1
|
||||
fi
|
||||
|
||||
#if [ ${TAG} != 'trunk' ]; then
|
||||
# TAG=branches/${TAG}
|
||||
#fi
|
||||
|
||||
# svn目录
|
||||
SVN_BASE_URL=${SVN_BASE_URL}/${TAG}/server
|
||||
# 发布目录
|
||||
PUB_ROOT=${PUB_ROOT}/${PUSH_LANG}/${VER}/${PLAT}/${SERVER_TYPE}
|
||||
# 代码临时编译目录
|
||||
TMP_SOURCE=${TMP_SOURCE}/${PUSH_LANG}/${TAG}
|
||||
|
||||
#先确定更新的服务器类型
|
||||
#确定最终发布路径
|
||||
opt "ver=${VER} server=${SERVER_TYPE} root =${PUB_ROOT} tmp_source=${TMP_SOURCE}"
|
||||
|
||||
set -- $ARGS
|
||||
ACTION=$1
|
||||
shift
|
||||
|
||||
case ${ACTION} in
|
||||
'pub_rel') PubRelease ;;
|
||||
'pub_up') PubUpdate ;;
|
||||
*) Usage ; exit1;;
|
||||
esac
|
||||
|
||||
lock_release
|
||||
|
||||
END_TIME=$(date '+%Y-%m-%d %H:%M:%S')
|
||||
|
||||
echo -e "start_time = ${START_TIME}, end_time = ${END_TIME}"
|
||||
@@ -0,0 +1,517 @@
|
||||
#! /bin/bash
|
||||
|
||||
ROOT=`cd $(dirname $0);pwd`
|
||||
if [ -d ${ROOT} ]; then
|
||||
cd ${ROOT}
|
||||
fi
|
||||
|
||||
ARGS=""
|
||||
|
||||
## 项目组自定义路径
|
||||
# ====================================================================================
|
||||
|
||||
# 服务器svn根目录
|
||||
SVN_BASE_URL=http://gwsj.4399svn.com/svn/ddt/project4
|
||||
# 发版根目录 运维的目录规范 /data/xxx/server
|
||||
PUB_ROOT=/data/ddxq/server
|
||||
# 发版脚本 运维的规范 xxxpub
|
||||
PUB_CMD=ddxqpub
|
||||
|
||||
# DEV BETA STABLE 这三个目录的代码对应运维给的三个发版目录
|
||||
# 假设DEV对应主干的代码目录 比如主干代码是 ${SVN_BASE_URL}/trunk, 这里就填DEV=trunk
|
||||
DEV=trunk
|
||||
BETA=branches/cn/stage1
|
||||
STABLE=stable
|
||||
BANSHU=branches/banshu
|
||||
|
||||
# svn账号密码
|
||||
USER=shouyouyizu
|
||||
PASSWORD=39420981
|
||||
|
||||
# 代码checkout的临时目录,编译用
|
||||
TMP_SOURCE=/data/tmp_server/ddxq
|
||||
|
||||
# 内网部署路径
|
||||
SERVER_DIR=/data/server/ddxq
|
||||
|
||||
# 内网主干登录服目录(内网重启和热更时指定的登录服)
|
||||
LOGIN_SERVER=login_server_s900
|
||||
|
||||
# 内网主干游戏服目录(内网重启和热更时指定的游戏服)
|
||||
GAME_SERVER=game_server_s901
|
||||
|
||||
# 内网版署登录服目录(内网重启和热更时指定的登录服)
|
||||
BS_LOGIN_SERVER=login_server_s700
|
||||
|
||||
# 内网版署游戏服目录(内网重启和热更时指定的游戏服)
|
||||
BS_GAME_SERVER=game_server_s701
|
||||
|
||||
# ====================================================================================
|
||||
|
||||
PLAT=android_cn
|
||||
PUSH_LANG=CN
|
||||
REBAR=rebar3
|
||||
|
||||
error() {
|
||||
NOW_TIME=
|
||||
echo -e "[错误] $(date '+%Y-%m-%d %H:%M:%S') $@"
|
||||
}
|
||||
|
||||
# 打印警告
|
||||
warn() {
|
||||
echo -e "[警告] $(date '+%Y-%m-%d %H:%M:%S') $@"
|
||||
}
|
||||
|
||||
# 打印信息
|
||||
opt() {
|
||||
echo -e "[操作] $(date '+%Y-%m-%d %H:%M:%S') $@"
|
||||
}
|
||||
|
||||
cmd() {
|
||||
echo -e "[指令] $(date '+%Y-%m-%d %H:%M:%S') $@"
|
||||
}
|
||||
|
||||
exit1() {
|
||||
lock_release
|
||||
exit 1
|
||||
}
|
||||
|
||||
|
||||
# 检查锁
|
||||
lock_check(){
|
||||
local task=$1
|
||||
lock=/tmp/server_shell.lock
|
||||
if [ -f $lock ]; then
|
||||
error "正在执行其他任务..., 如确认没有其他任务在执行,请删除文件${lock}"
|
||||
exit 1
|
||||
fi
|
||||
touch $lock # 加锁
|
||||
echo $task > $lock
|
||||
}
|
||||
|
||||
# 解锁
|
||||
lock_release(){
|
||||
local task=$1
|
||||
lock=/tmp/server_shell.lock
|
||||
rm -f $lock
|
||||
}
|
||||
|
||||
|
||||
|
||||
# 使用说明
|
||||
Usage ()
|
||||
{
|
||||
echo "说明:"
|
||||
echo "当前路径:${ROOT}"
|
||||
echo "用法:"
|
||||
echo "动作 [选项]"
|
||||
echo "动作:"
|
||||
echo " reboot 重新部署,重启内网测试服"
|
||||
echo " reload 热更内网测试服"
|
||||
echo " pub_rel 发布全量包"
|
||||
echo " pub_up 发布升级包"
|
||||
echo ""
|
||||
echo "选项:"
|
||||
echo " -h, --help 显示本信息"
|
||||
echo " -v, --ver dev|beta|stable 推送的版本"
|
||||
echo " -p, --plat android_cn|ios_cn|mix_cn 推送的平台"
|
||||
echo " -l, --lang CN 推送的语言"
|
||||
echo " -s, --server game_server|login_server|detour_server|cross_server|center_server 推送的服务器类型"
|
||||
|
||||
echo ""
|
||||
}
|
||||
|
||||
##从svn下载对应的代码,并设置当前版本号
|
||||
SvnUpdate ()
|
||||
{
|
||||
if [ -d ${TMP_SOURCE} ]; then
|
||||
opt "${TMP_SOURCE} 目录已存在,svn update"
|
||||
cmd "========= svn up --force --accept tc ${TMP_SOURCE} --username ${USER} --password ${PASSWORD} ========="
|
||||
svn up --force --accept tc ${TMP_SOURCE} --username ${USER} --password ${PASSWORD}
|
||||
else
|
||||
opt "${TMP_SOURCE} 目录不存在,创建并svn checkout"
|
||||
cmd "========= svn co ${SVN_BASE_URL} ${TMP_SOURCE} --username ${USER} --password ${PASSWORD} ========="
|
||||
mkdir -p ${TMP_SOURCE}
|
||||
svn co ${SVN_BASE_URL} ${TMP_SOURCE} --username ${USER} --password ${PASSWORD}
|
||||
fi
|
||||
|
||||
cd ${ROOT}
|
||||
}
|
||||
|
||||
## 生成全量包
|
||||
Release ()
|
||||
{
|
||||
if [ ! -d ${PUB_ROOT} ]; then
|
||||
mkdir -p ${PUB_ROOT}
|
||||
fi
|
||||
|
||||
LAST_VERSION=`svn info ${TMP_SOURCE} | grep 'Last Changed Rev: ' | cut -d' ' -f4`
|
||||
if [ "${REL_VERSION}" = "" ] || [ "${REL_VERSION}" = "0" ]; then
|
||||
REL_VERSION=${LAST_VERSION}
|
||||
fi
|
||||
|
||||
opt "========= LAST_VERSION=${LAST_VERSION}, REL_VERSION=${REL_VERSION} ========="
|
||||
|
||||
PRJ=${TMP_SOURCE}/_build/${SERVER_TYPE}/rel/${SERVER_TYPE}
|
||||
REL_PACKET=${PRJ}/${SERVER_TYPE}-${REL_VERSION}.tar.gz
|
||||
|
||||
if [ -f ${REL_PACKET} ]; then
|
||||
opt "========= Release package for version ${REL_VERSION} already exists ========="
|
||||
else
|
||||
# # 删除旧包,因为如果是升级包,里面没有自带erts
|
||||
# cmd "========= remove old packet: rm -rf ${REL_PACKET} ========="
|
||||
# rm -rf ${REL_PACKET}
|
||||
#
|
||||
# 删除旧的rebar3执行脚本,一个版本一个脚本可能是为了启动不同版本设置,但我们用不上先删了
|
||||
cmd "========= remove old packet: rm -rf ${PRJ}/bin/game_server-* ========="
|
||||
rm -rf ${PRJ}/bin/${SERVER_TYPE}-*
|
||||
|
||||
cd ${TMP_SOURCE} || exit1
|
||||
opt "========= Generating release package for version ${REL_VERSION} ========="
|
||||
cmd "========= ${REBAR} as ${SERVER_TYPE} release ========="
|
||||
${REBAR} as ${SERVER_TYPE} release || exit1
|
||||
cmd "========= ${REBAR} as ${SERVER_TYPE} tar ========="
|
||||
${REBAR} as ${SERVER_TYPE} tar || exit1
|
||||
|
||||
#保留最后10个(即第11个开始删除),太多的话会影响打升级包,占用大量内存和打包时间
|
||||
# cmd "========= ls ${PRJ}/releases | grep -v RELEASES | grep -v "start_erl.data" | sort -rg | tail -n +11 | xargs rm -rf ========="
|
||||
# ls ${PRJ}/releases | grep -v RELEASES | grep -v "start_erl.data" | sort -rg | tail -n +11 | xargs rm -rf
|
||||
#保留最后10个包,太多的话会影响打升级包,占用大量内存和打包时间
|
||||
# cmd "========= ls ${PRJ} | grep game_server- | sort -rg | tail -n +11 | xargs rm -rf ========="
|
||||
# ls ${PRJ} | grep game_server- | sort -rg | tail -n +11 | xargs rm -rf
|
||||
|
||||
# 删除旧发版包内容
|
||||
cmd "========= rm -rf ${PUB_ROOT}/* ========="
|
||||
rm -rf ${PUB_ROOT}/*
|
||||
fi
|
||||
|
||||
cmd "========= tar -zxf ${REL_PACKET} -C ${PUB_ROOT} ========="
|
||||
tar -zxf ${REL_PACKET} -C ${PUB_ROOT} || exit1
|
||||
|
||||
# 删除bin下多余的文件,暂时先用手动删除,后面再研究能否用命令来删除
|
||||
cmd "========= rm -rf ${PUB_ROOT}/bin/${SERVER_TYPE}-* ========="
|
||||
rm -rf ${PUB_ROOT}/bin/${SERVER_TYPE}-*
|
||||
|
||||
cd ${ROOT}
|
||||
}
|
||||
|
||||
Update ()
|
||||
{
|
||||
if [ ! -d ${PUB_ROOT} ]; then
|
||||
opt "${PUB_ROOT} Not exists"
|
||||
exit1
|
||||
fi
|
||||
|
||||
PRJ=${TMP_SOURCE}/_build/${SERVER_TYPE}/rel/${SERVER_TYPE}
|
||||
|
||||
# LAST_VERSION=`ls ${PRJ}/releases | grep -v RELEASES | grep -v "start_erl.data" | sort -rg | head -1`
|
||||
LAST_VERSION=`ls ${PRJ} | grep "game_server-" | sort -rg | head -1 | tr -cd "[0-9]"`
|
||||
|
||||
if [ "${PREV_REL_REV}" = "" ] || [ "${PREV_REL_REV}" = "0" ]; then
|
||||
PREV_REL_REV=${LAST_VERSION}
|
||||
fi
|
||||
|
||||
opt "========= LAST_VERSION=${LAST_VERSION}, PREV_REL_REV=${PREV_REL_REV} ========="
|
||||
|
||||
REL_VERSION=`svn info ${TMP_SOURCE} | grep 'Last Changed Rev: ' | cut -d' ' -f4`
|
||||
|
||||
# 没有新版本可以升级
|
||||
if [ ${PREV_REL_REV} = ${REL_VERSION} ]; then
|
||||
opt "Is latest version, do not need upgrade ..."
|
||||
exit1
|
||||
fi
|
||||
|
||||
|
||||
|
||||
if [ -z ${PREV_REL_REV} ]; then
|
||||
opt "No previous release ${PREV_REL_REV}, skip update package generation...."
|
||||
exit1
|
||||
else
|
||||
# 删除旧包,有可能是其他版本升级到该版本的包
|
||||
cmd "========= remove old packet: rm -rf ${PRJ}/${SERVER_TYPE}-${REL_VERSION}.tar.gz ========="
|
||||
rm -rf ${PRJ}/${SERVER_TYPE}-${REL_VERSION}.tar.gz
|
||||
|
||||
# 删除旧的rebar3执行脚本,一个版本一个脚本可能是为了启动不同版本设置,但我们用不上先删了
|
||||
cmd "========= remove old packet: rm -rf ${PRJ}/bin/${SERVER_TYPE}-* ========="
|
||||
rm -rf ${PRJ}/bin/${SERVER_TYPE}-*
|
||||
|
||||
cmd "========= cd ${TMP_SOURCE} ========="
|
||||
cd ${TMP_SOURCE} || exit1
|
||||
|
||||
opt "========= Generating update package for previous version ${PREV_REL_REV} ========="
|
||||
# 如果版本已经存在,则可能两次升级包基于的版本不同,需要先清理上次版本升级的信息
|
||||
if [ ${LAST_VERSION} = ${REL_VERSION} ]; then
|
||||
cmd "========= ${REBAR} as ${SERVER_TYPE} appup clean ========="
|
||||
${REBAR} as ${SERVER_TYPE} appup clean || exit1
|
||||
fi
|
||||
cmd "========= ${REBAR} as ${SERVER_TYPE} release ========="
|
||||
${REBAR} as ${SERVER_TYPE} release || exit1
|
||||
cmd "========= ${REBAR} as ${SERVER_TYPE} appup generate --previous_version=${PREV_REL_REV} ========="
|
||||
${REBAR} as ${SERVER_TYPE} appup generate --previous_version=${PREV_REL_REV} || exit1
|
||||
cmd "========= ${REBAR} as ${SERVER_TYPE} relup --upfrom=${PREV_REL_REV} --relname=${SERVER_TYPE} --relvsn=${REL_VERSION} ========="
|
||||
${REBAR} as ${SERVER_TYPE} relup --upfrom=${PREV_REL_REV} --relname=${SERVER_TYPE} --relvsn=${REL_VERSION} || exit1
|
||||
cmd "========= ${REBAR} as ${SERVER_TYPE} tar ========="
|
||||
${REBAR} as ${SERVER_TYPE} tar || exit1
|
||||
fi
|
||||
|
||||
cmd "========= cp -f ${PRJ}/${SERVER_TYPE}-${REL_VERSION}.tar.gz ${PUB_ROOT}/releases/ ========="
|
||||
cp -f ${PRJ}/${SERVER_TYPE}-${REL_VERSION}.tar.gz ${PUB_ROOT}/releases/
|
||||
|
||||
#保留最后10个包信息,太多的话会影响打升级包,占用大量内存和打包时间
|
||||
# cmd "========= ls ${PRJ}/releases | grep -v RELEASES | grep -v "start_erl.data" | sort -rg | tail -n +11 | xargs rm -rf ========="
|
||||
# ls ${PRJ}/releases | grep -v RELEASES | grep -v "start_erl.data" | sort -rg | tail -n +11 | xargs rm -rf
|
||||
#保留最后10个包,太多的话会影响打升级包,占用大量内存和打包时间
|
||||
# cmd "========= ls ${PRJ} | grep game_server- | sort -rg | tail -n +11 | xargs rm -rf ========="
|
||||
# ls ${PRJ} | grep game_server- | sort -rg | tail -n +11 | xargs rm -rf
|
||||
|
||||
cd ${ROOT}
|
||||
}
|
||||
|
||||
# 发版全量包
|
||||
PubRelease()
|
||||
{
|
||||
opt "推送${VER}版本${SERVER_TYPE}全量包到外网"
|
||||
|
||||
SvnUpdate
|
||||
|
||||
Release
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
error "生成全量压缩包失败,请检查"
|
||||
exit1
|
||||
fi
|
||||
|
||||
cd ${ROOT}
|
||||
|
||||
opt "更新完成,立刻发版${PUBNOW}"
|
||||
|
||||
#版署服也放在beta版本中
|
||||
if [ ${VER} = 'banshu' ]; then
|
||||
cmd "========= sh ${PUB_CMD} server ${PUSH_LANG} beta ${PLAT} ========="
|
||||
sh ${PUB_CMD} server ${PUSH_LANG} beta ${PLAT}
|
||||
else
|
||||
cmd "========= sh ${PUB_CMD} server ${PUSH_LANG} ${VER} ${PLAT} ========="
|
||||
sh ${PUB_CMD} server ${PUSH_LANG} ${VER} ${PLAT}
|
||||
fi
|
||||
}
|
||||
|
||||
# 发版全量包
|
||||
PubUpdate()
|
||||
{
|
||||
opt "推送${VER}版本${SERVER_TYPE}升级包到外网"
|
||||
|
||||
SvnUpdate
|
||||
|
||||
Update
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
error "生成升级压缩包失败,请检查"
|
||||
exit1
|
||||
fi
|
||||
|
||||
cd ${ROOT}
|
||||
|
||||
opt "更新完成,立刻发版${PUBNOW}"
|
||||
|
||||
#版署服也放在beta版本中
|
||||
if [ ${VER} = 'banshu' ]; then
|
||||
cmd "========= sh ${PUB_CMD} server ${PUSH_LANG} beta ${PLAT} ========="
|
||||
sh ${PUB_CMD} server ${PUSH_LANG} beta ${PLAT}
|
||||
else
|
||||
cmd "========= sh ${PUB_CMD} server ${PUSH_LANG} ${VER} ${PLAT} ========="
|
||||
sh ${PUB_CMD} server ${PUSH_LANG} ${VER} ${PLAT}
|
||||
fi
|
||||
}
|
||||
|
||||
Reboot(){
|
||||
opt "更新重启${VER}版本${SERVER_TYPE}"
|
||||
|
||||
if [ ${SERVER_TYPE} = 'login_server' ]; then
|
||||
BIN_DIR=${SERVER_DIR}/${LOGIN_SERVER}/bin
|
||||
PUB_ROOT=${SERVER_DIR}/${LOGIN_SERVER}
|
||||
CONFIG_DIR=${SERVER_DIR}/config/${LOGIN_SERVER}
|
||||
elif [ ${SERVER_TYPE} = 'game_server' ]; then
|
||||
BIN_DIR=${SERVER_DIR}/${GAME_SERVER}/bin
|
||||
PUB_ROOT=${SERVER_DIR}/${GAME_SERVER}
|
||||
CONFIG_DIR=${SERVER_DIR}/config/${GAME_SERVER}
|
||||
else
|
||||
Usage
|
||||
error "${SERVER_TYPE}不是有效的服务器类型"
|
||||
exit1
|
||||
fi
|
||||
|
||||
SvnUpdate
|
||||
|
||||
cmd "========= sh ${BIN_DIR}/${SERVER_TYPE} stop ========="
|
||||
sh ${BIN_DIR}/${SERVER_TYPE} stop
|
||||
#要先检查是否运行中
|
||||
# if [ $? -ne 0 ]; then
|
||||
# error "关闭服务器失败,请检查"
|
||||
# exit1
|
||||
# fi
|
||||
|
||||
cmd "========= rm -rf ${PUB_ROOT}_old ========="
|
||||
rm -rf ${PUB_ROOT}_old
|
||||
cmd "========= rm -rf ${PUB_ROOT}/*.dump ========="
|
||||
rm -rf ${PUB_ROOT}/*.dump
|
||||
cmd "========= mv ${PUB_ROOT} ${PUB_ROOT}_old ========="
|
||||
mv ${PUB_ROOT} ${PUB_ROOT}_old
|
||||
|
||||
Release
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
error "指定版本服代码编译失败,请检查"
|
||||
exit1
|
||||
fi
|
||||
|
||||
cmd "========= rm -rf ${PUB_ROOT}/sys.config ========="
|
||||
rm -rf ${PUB_ROOT}/sys.config
|
||||
cmd "========= cp ${CONFIG_DIR}/sys.config ${PUB_ROOT}/sys.config ========="
|
||||
cp ${CONFIG_DIR}/sys.config ${PUB_ROOT}/sys.config
|
||||
|
||||
cmd "========= rm -rf ${PUB_ROOT}/vm.args ========="
|
||||
rm -rf ${PUB_ROOT}/vm.args
|
||||
cmd "========= cp ${CONFIG_DIR}/vm.args ${PUB_ROOT}/vm.args ========="
|
||||
cp ${CONFIG_DIR}/vm.args ${PUB_ROOT}/vm.args
|
||||
|
||||
cmd "========= sh ${BIN_DIR}/${SERVER_TYPE} daemon ========="
|
||||
sh ${BIN_DIR}/${SERVER_TYPE} daemon
|
||||
if [ $? -ne 0 ]; then
|
||||
error "启动服务器失败,请检查"
|
||||
exit1
|
||||
fi
|
||||
|
||||
opt "重启服务器成功......"
|
||||
|
||||
cd ${ROOT}
|
||||
|
||||
}
|
||||
|
||||
Reload(){
|
||||
opt "热更${VER}版本${SERVER_TYPE}"
|
||||
|
||||
if [ ${SERVER_TYPE} = 'login_server' ]; then
|
||||
BIN_DIR=${SERVER_DIR}/${LOGIN_SERVER}/bin
|
||||
PUB_ROOT=${SERVER_DIR}/${LOGIN_SERVER}
|
||||
elif [ ${SERVER_TYPE} = 'game_server' ]; then
|
||||
BIN_DIR=${SERVER_DIR}/${GAME_SERVER}/bin
|
||||
PUB_ROOT=${SERVER_DIR}/${GAME_SERVER}
|
||||
else
|
||||
Usage
|
||||
error "${SERVER_TYPE}不是有效的服务器类型"
|
||||
exit1
|
||||
fi
|
||||
|
||||
SvnUpdate
|
||||
|
||||
PREV_REL_REV=`ls ${PUB_ROOT}/releases | grep -v RELEASES | grep -v "start_erl.data" | sort -rg | head -1`
|
||||
REL_VERSION=`svn info ${TMP_SOURCE} | grep 'Last Changed Rev: ' | cut -d' ' -f4`
|
||||
|
||||
if [ ${PREV_REL_REV} = ${REL_VERSION} ]; then
|
||||
opt "运行的代码已经是最新版本,无需热更...."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
Update
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
error "生成升级压缩包失败,请检查"
|
||||
exit1
|
||||
fi
|
||||
|
||||
sh ${BIN_DIR}/${SERVER_TYPE} upgrade ${REL_VERSION}
|
||||
if [ $? -ne 0 ]; then
|
||||
error "热更服务器失败,请检查"
|
||||
exit1
|
||||
fi
|
||||
|
||||
opt "热更服务器成功......"
|
||||
|
||||
}
|
||||
|
||||
IsRun(){
|
||||
RUN_PROC_CNT=`ps -ef | grep server.sh | grep -v grep | grep -v vi | wc -l`
|
||||
if [ ${RUN_PROC_CNT} -gt 2 ]; then
|
||||
opt "run proc cnt = ${RUN_PROC_CNT}"
|
||||
error "其他人正在运行中"
|
||||
exit1
|
||||
fi
|
||||
}
|
||||
|
||||
#RUN_PROC_CNT=`ps -ef | grep -v grep | grep server.sh | wc -l`
|
||||
#opt "run proc cnt = ${RUN_PROC_CNT}"
|
||||
#if [ ${RUN_PROC_CNT} -gt 2 ]; then
|
||||
# error "其他人正在运行中"
|
||||
# exit1
|
||||
#fi
|
||||
|
||||
lock_check
|
||||
|
||||
# parse command line parameters
|
||||
while [ $# -ne 0 ] ; do
|
||||
PARAM=$1
|
||||
shift
|
||||
case $PARAM in
|
||||
--) break ;;
|
||||
--help|-h) Usage; exit 0 ;;
|
||||
--server|-s) SERVER_TYPE=$1; shift ;;
|
||||
--ver|-v) VER=$1; shift ;;
|
||||
--plat|-p) PLAT=$1; shift ;;
|
||||
--lang|-l) PUSH_LANG=$1; shift ;;
|
||||
--pre_version|-pv) PREV_REL_REV=$1; shift ;;
|
||||
--release_version|-rv) REL_VERSION=$1; shift ;;
|
||||
*) ARGS="$ARGS $PARAM" ;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [ "${SERVER_TYPE}" = "" ]; then
|
||||
Usage
|
||||
error "需要指定-s 参数"
|
||||
exit1
|
||||
fi
|
||||
|
||||
#先确定更新的服务器类型
|
||||
if [ ${VER} = 'dev' ]; then
|
||||
SVN_BASE_URL=${SVN_BASE_URL}/${DEV}/server/server
|
||||
PUB_ROOT=${PUB_ROOT}/${PUSH_LANG}/${VER}/${PLAT}/${SERVER_TYPE}
|
||||
elif [ ${VER} = 'banshu' ]; then
|
||||
SVN_BASE_URL=${SVN_BASE_URL}/${BANSHU}/server/server
|
||||
PUB_ROOT=${PUB_ROOT}/${PUSH_LANG}/beta/${PLAT}/${SERVER_TYPE}
|
||||
LOGIN_SERVER = ${BS_LOGIN_SERVER}
|
||||
GAME_SERVER = ${BS_GAME_SERVER}
|
||||
elif [ ${VER} = 'beta' ]; then
|
||||
SVN_BASE_URL=${SVN_BASE_URL}/${BETA}/server/server
|
||||
PUB_ROOT=${PUB_ROOT}/${PUSH_LANG}/${VER}/${PLAT}/${SERVER_TYPE}
|
||||
elif [ ${VER} = 'stable' ]; then
|
||||
SVN_BASE_URL=${SVN_BASE_URL}/${STABLE}/server/server
|
||||
PUB_ROOT=${PUB_ROOT}/${PUSH_LANG}/${VER}/${PLAT}/${SERVER_TYPE}
|
||||
else
|
||||
Usage
|
||||
error "${VER}不是有效的服务器版本: [dev | beta | stable]"
|
||||
exit1
|
||||
fi
|
||||
|
||||
# PUB_ROOT=${PUB_ROOT}/${PUSH_LANG}/${VER}/${PLAT}/${SERVER_TYPE}
|
||||
#PUB_ROOT=${PUB_ROOT}/${PUSH_LANG}/${VER}/${PLAT}/${SERVER_TYPE}
|
||||
|
||||
# 代码临时编译目录
|
||||
TMP_SOURCE=${TMP_SOURCE}/${PUSH_LANG}/${VER}/${PLAT}
|
||||
|
||||
#先确定更新的服务器类型
|
||||
#确定最终发布路径
|
||||
opt "ver=${VER} server=${SERVER_TYPE} root =${PUB_ROOT} tmp_source=${TMP_SOURCE}"
|
||||
|
||||
|
||||
set -- $ARGS
|
||||
ACTION=$1
|
||||
shift
|
||||
|
||||
case ${ACTION} in
|
||||
'reboot') Reboot ;;
|
||||
'reload') Reload ;;
|
||||
'pub_rel') PubRelease ;;
|
||||
'pub_up') PubUpdate ;;
|
||||
*) Usage ; exit1;;
|
||||
esac
|
||||
|
||||
lock_release
|
||||
@@ -0,0 +1,305 @@
|
||||
#!/usr/bin/env bash
|
||||
#-------------------------------------------------
|
||||
# 命令脚本
|
||||
# @author lwt
|
||||
#-------------------------------------------------
|
||||
# 连接数据库
|
||||
DOC[sql_start]="连接数据库 参数:数据库名称"
|
||||
fun_sql_start(){
|
||||
is_exists_server_id
|
||||
DB=`show_game_db ${SERVER_ID}`
|
||||
INFO "连接\e[92m${DB}\e[0;0m数据库"
|
||||
start ${DB}
|
||||
}
|
||||
|
||||
# 查看数据库
|
||||
DOC[sql_all_data]="查看数据库"
|
||||
fun_sql_all_data(){
|
||||
INFO "查看ip:\e[92m${DB_HOST}\e[0;0m所有数据库..."
|
||||
show_databases ${DB_HOST}
|
||||
}
|
||||
|
||||
|
||||
|
||||
# 远程执行sql脚本
|
||||
DOC[sql_update_sql]="远程执行sql脚本"
|
||||
fun_sql_update_sql(){
|
||||
is_exists_server_id
|
||||
DB=`show_game_db ${SERVER_ID}`
|
||||
FILE=${ROOT}/${SQL_GAME_UPDATE}
|
||||
INFO "数据库::\e[92m${DB}\e[0;0m 执行sql脚本...${FILE}"
|
||||
update_sql ${DB} ${FILE}
|
||||
# cat /dev/null > ${FILE}
|
||||
}
|
||||
|
||||
# 生成本地sql数据库
|
||||
DOC[sql_local]="生成本地sql数据库"
|
||||
fun_sql_local(){
|
||||
FILE=${ROOT}/${SQL_GAME_INIT}
|
||||
mysql -A -h ${DB_LOCAL_HOST} -u${DB_LOCAL_USE} -p${DB_LOCAL_PASS} -P${DB_LOCAL_PORT} -e "DROP DATABASE if exists ${DB_LOCAL_SERVER}; create database if not exists ${DB_LOCAL_SERVER};"
|
||||
INFO "数据库::\e[92m${DB_LOCAL_HOST}\e[0;0m 生成本地sql数据库...${FILE}"
|
||||
mysql -A -h ${DB_LOCAL_HOST} -u${DB_LOCAL_USE} -p${DB_LOCAL_PASS} -P${DB_LOCAL_PORT} -D ${DB_LOCAL_SERVER} < ${FILE}
|
||||
}
|
||||
|
||||
|
||||
|
||||
# 查看服务器列表
|
||||
DOC[sql_server]="查看服务器列表"
|
||||
fun_sql_server(){
|
||||
INFO "查看ip:\e[92m${DB_HOST}\e[0;0m所有服务器列表..."
|
||||
show_server ${DB_HOST}
|
||||
}
|
||||
|
||||
# 查看所有表
|
||||
DOC[sql_all_table]="查看所有数据表"
|
||||
fun_sql_all_table(){
|
||||
is_exists_server_id
|
||||
DB=`show_game_db ${SERVER_ID}`
|
||||
INFO "查看所有\e[92m${DB}\e[0;0m数据表..."
|
||||
TABLES=`show_tables ${DB}`
|
||||
for TABLE in ${TABLES[*]}; do
|
||||
NUM=`table_count ${DB} ${TABLE}`
|
||||
FROMAT "\e[92m${TABLE}\e[0;0m count in \e[92m${NUM}\e[0;0m"
|
||||
done
|
||||
}
|
||||
|
||||
# 查看所有账号
|
||||
DOC[sql_all_account]="查看所有账号 参数:服务器id"
|
||||
fun_sql_all_account(){
|
||||
is_exists_server_id
|
||||
DB=`show_game_db ${SERVER_ID}`
|
||||
is_exists_data ${DB}
|
||||
INFO "查看所有\e[92m${DB}\e[0;0m中的所有账号..."
|
||||
show_account ${DB}
|
||||
}
|
||||
|
||||
# 清表结构
|
||||
DOC[sql_del_table]="删除数据表 参数:表名 服务器id"
|
||||
fun_sql_del_table(){
|
||||
if [ "${1}" = "" ]; then
|
||||
ERR "请选中要删除的表格"
|
||||
exit 0
|
||||
else
|
||||
TABLE=$1
|
||||
fi
|
||||
is_exists_server_id
|
||||
DB=`show_game_db ${SERVER_ID}`
|
||||
is_exists_table ${DB} ${TABLE}
|
||||
INFO "删除\e[92m${DB}\e[0;0m数据库的\e[92m${TABLE}\e[0;0m表格"
|
||||
INFO "确定要删除(y/n):"
|
||||
read IS
|
||||
if [ ${IS} == y ]; then
|
||||
drop_table ${DB} ${TABLE}
|
||||
if [ $? -ne 0 ]; then
|
||||
ERR "删除失败,请检查"
|
||||
fi
|
||||
INFO "删除完成"
|
||||
|
||||
else
|
||||
INFO "取消删除"
|
||||
fi
|
||||
}
|
||||
|
||||
# 清档
|
||||
DOC[sql_clear_db]="停服清档 参数:服务器id"
|
||||
fun_sql_clear_db(){
|
||||
is_exists_server_id
|
||||
GAME_DB=`show_game_db ${SERVER_ID}`
|
||||
LOG_DB=`show_log_db ${SERVER_ID}`
|
||||
INFO "正在删除数据表\e[92m${GAME_DB}\e[0;0m"
|
||||
INFO "正在删除日志表\e[92m${LOG_DB}\e[0;0m"
|
||||
INFO "确定要清档(y/n):"
|
||||
read IS
|
||||
if [ "${IS}" == "y" ] || [ "${IS}" == "Y" ]; then
|
||||
#关服
|
||||
SERVER_NODE=`show_server_node ${SERVER_ID}`
|
||||
fun_srv_stop ${SERVER_ID}
|
||||
drop_login ${SERVER_ID}
|
||||
drop_database ${GAME_DB}
|
||||
drop_database ${LOG_DB}
|
||||
rm -rf ${ROOT}/server/server/dets
|
||||
INFO "清档完成"
|
||||
else
|
||||
INFO "取消清档"
|
||||
fi
|
||||
}
|
||||
|
||||
# 执行sql命令
|
||||
DOC[sql_command]="执行sql命令 参数:服务器id sql命令"
|
||||
fun_sql_command(){
|
||||
if [ "$*" = "" ]; then
|
||||
ERR "请输入命令"
|
||||
exit 1
|
||||
else
|
||||
COMMAND=$*
|
||||
fi
|
||||
is_exists_server_id
|
||||
DB_NAME=`show_game_db ${SERVER_ID}`
|
||||
INFO "数据库\e[92m${DB_NAME}\e[0;0m执行\e[92m${COMMAND}\e[0;0m的命令"
|
||||
command ${COMMAND}
|
||||
}
|
||||
|
||||
# 查询表结构
|
||||
DOC[sql_desc]="查询表结构 参数:表名 server_id"
|
||||
fun_sql_desc(){
|
||||
if [ "${1}" = "" ]; then
|
||||
ERR "请输入要查询的表格"
|
||||
exit 0
|
||||
else
|
||||
TABLE=$1
|
||||
fi
|
||||
is_exists_server_id
|
||||
DB=`show_game_db ${SERVER_ID}`
|
||||
INFO "查看\e[92m${DB}\e[0;0m数据库的\e[92m${TABLE}\e[0;0m表格结构"
|
||||
is_exists_table ${DB} ${TABLE}
|
||||
NUM=`table_count ${DB} ${TABLE}`
|
||||
INFO "表格行数${NUM}"
|
||||
desc ${DB} ${TABLE}
|
||||
exit 0
|
||||
}
|
||||
|
||||
# 判断表是否存在
|
||||
is_exists_table(){
|
||||
DB=$1
|
||||
TABLE=$2
|
||||
TABLES=`show_tables ${DB}`
|
||||
if is_exist ${TABLE} ${TABLES}; then
|
||||
return 0
|
||||
else
|
||||
ERR "要删除的${TABLE}表不存在"
|
||||
INFO "是否查看所有表(y/n):"
|
||||
read ALL
|
||||
if [ "${ALL}" == "y" ] || [ "${ALL}" == "Y" ]; then
|
||||
fun_sql_all_table
|
||||
fi
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 判断数据表是否存在
|
||||
is_exists_data(){
|
||||
DB=$1
|
||||
TABLES=`show_databases ${DB_HOST}`
|
||||
if is_exist ${DB} ${TABLES}; then
|
||||
return 0
|
||||
else
|
||||
ERR "查询的${DB}数据库不存在"
|
||||
INFO "是否查看所有数据库(y/n):"
|
||||
read ALL
|
||||
if [ "${ALL}" == "y" ] || [ "${ALL}" == "Y" ]; then
|
||||
fun_sql_all_data
|
||||
fi
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 判断服务器是否存在
|
||||
is_exists_server_id(){
|
||||
TABLES=`show_server_id`
|
||||
if is_exist ${SERVER_ID} ${TABLES}; then
|
||||
return 0
|
||||
else
|
||||
ERR "要操作的(server_id = ${SERVER_ID})服务器不存在"
|
||||
INFO "是否查看所服务器(y/n):"
|
||||
read ALL
|
||||
if [ "${ALL}" == "y" ] || [ "${ALL}" == "Y" ]; then
|
||||
fun_sql_server
|
||||
fi
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
#判断是否存在
|
||||
is_exist(){
|
||||
TYPE=$1
|
||||
shift
|
||||
# 将输入的参数转换为列表
|
||||
TYPES=$@
|
||||
for K in ${TYPES[*]}; do
|
||||
if [[ "${TYPE}" == "${K}" ]]; then
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
return 1
|
||||
}
|
||||
|
||||
# 启动服务器
|
||||
start(){
|
||||
mysql -A -h ${DB_HOST} -u${DB_USE} -p${DB_PASS} -P${DB_PORT} -D ${1}
|
||||
}
|
||||
|
||||
# 获取数据库
|
||||
show_server(){
|
||||
mysql -A -h ${1} -u${DB_USE} -p${DB_PASS} -P${DB_PORT} -D ${DB_SERVER} -e "select server_id,game_db,server_node,role_cnt from server_info;"
|
||||
}
|
||||
|
||||
# 获取数据库
|
||||
show_server_node(){
|
||||
mysql -A -h ${DB_HOST} -u${DB_USE} -p${DB_PASS} -P${DB_PORT} -D ${DB_SERVER} -BNe "select server_node from server_info where server_id = ${1};"
|
||||
}
|
||||
|
||||
# 获取数据库
|
||||
show_server_id(){
|
||||
mysql -A -h ${DB_HOST} -u${DB_USE} -p${DB_PASS} -P${DB_PORT} -D ${DB_SERVER} -BNe "select server_id from server_info;"
|
||||
}
|
||||
|
||||
# 获取数据库
|
||||
show_game_db(){
|
||||
mysql -A -h ${DB_HOST} -u${DB_USE} -p${DB_PASS} -P${DB_PORT} -D ${DB_SERVER} -BNe "select game_db from server_info where server_id = ${1};"
|
||||
}
|
||||
|
||||
# 获取数据库
|
||||
show_log_db(){
|
||||
mysql -A -h ${DB_HOST} -u${DB_USE} -p${DB_PASS} -P${DB_PORT} -D ${DB_SERVER} -BNe "select log_db from server_info where server_id = ${1};"
|
||||
}
|
||||
|
||||
# 获取数据库
|
||||
show_databases(){
|
||||
mysql -A -h ${1} -u${DB_USE} -p${DB_PASS} -P${DB_PORT} -e "show databases"
|
||||
}
|
||||
|
||||
# 获取所有表
|
||||
show_tables(){
|
||||
mysql -A -h ${DB_HOST} -u${DB_USE} -p${DB_PASS} -P${DB_PORT} -D ${1} -BNe "show tables"
|
||||
}
|
||||
|
||||
# 获取所有账号
|
||||
show_account(){
|
||||
mysql -A -h ${DB_HOST} -u${DB_USE} -p${DB_PASS} -P${DB_PORT} -D ${1} -e "select role_id,role_name,fn_uid,level from role"
|
||||
}
|
||||
|
||||
# 获取表数量
|
||||
table_count(){
|
||||
mysql -A -h ${DB_HOST} -u${DB_USE} -p${DB_PASS} -P${DB_PORT} -D ${1} -NBe "select count(1) from ${2}"
|
||||
}
|
||||
|
||||
# 查看表结构
|
||||
desc(){
|
||||
mysql -A -h ${DB_HOST} -u${DB_USE} -p${DB_PASS} -P${DB_PORT} -D ${1} -e "desc ${2}"
|
||||
}
|
||||
|
||||
# 执行命令
|
||||
command(){
|
||||
mysql -A -h ${DB_HOST} -u${DB_USE} -p${DB_PASS} -P${DB_PORT} -D ${DB_NAME} -e "$*"
|
||||
}
|
||||
|
||||
# 清除数据库
|
||||
drop_database(){
|
||||
mysql -A -h${DB_HOST} -u${DB_USE} -p${DB_PASS} -P${DB_PORT} -e "DROP DATABASE ${1}"
|
||||
}
|
||||
|
||||
# 清除表
|
||||
drop_table(){
|
||||
mysql -A -h ${DB_HOST} -u${DB_USE} -p${DB_PASS} -P${DB_PORT} -D ${1} -e "drop table ${2}"
|
||||
}
|
||||
|
||||
# 清除登录信息
|
||||
drop_login(){
|
||||
WERL_NUM=`ps_num ${WERL}`
|
||||
${ERL} -noshell -name eval_server${WERL_NUM}@127.0.0.1 -setcookie ${DEF_COOKIE} -eval "rpc:call('${LOGIN_SERVER_NODE}', login_server_app, remove_server_data, [${1}])" -s c q
|
||||
}
|
||||
|
||||
# 执行sql更新
|
||||
update_sql(){
|
||||
mysql -A -h ${DB_HOST} -u${DB_USE} -p${DB_PASS} -P${DB_PORT} -D ${1} < ${2}
|
||||
}
|
||||
@@ -0,0 +1,386 @@
|
||||
#!/usr/bin/env bash
|
||||
#-------------------------------------------------
|
||||
# 命令脚本
|
||||
# @author lwt
|
||||
#-------------------------------------------------
|
||||
# 启动游戏节点
|
||||
DOC[srv_start]="启动游戏服务器,参数:别名 服务器类型 "
|
||||
fun_srv_start(){
|
||||
cd ${ROOT}/server/server
|
||||
lock_check srv_start_${ALIAS}
|
||||
INFO "执行命令:rebar3 as ${SERVER_TYPE} ${ALIAS}"
|
||||
INFO "启动\e[92m${SERVER_TYPE} ${ALIAS}\e[0;0m游戏服务器..."
|
||||
${REBAR} as ${SERVER_TYPE} ${ALIAS}
|
||||
lock_release srv_start_${ALIAS}
|
||||
}
|
||||
|
||||
# 关闭游戏节点
|
||||
DOC[srv_stop]="关闭游戏节点,参数: 服务器id "
|
||||
fun_srv_stop(){
|
||||
is_exists_server_id
|
||||
#关服
|
||||
SERVER_NODE=`show_server_node ${SERVER_ID}`
|
||||
INFO "关闭\e[92m${SERVER_NODE}\e[0;0m游戏节点..."
|
||||
erl_call -c ${DEF_COOKIE} -n ${SERVER_NODE} -a "init stop" &
|
||||
}
|
||||
|
||||
|
||||
# 关闭游戏节点
|
||||
DOC[srv_stop_client]="远程节点:参数:服务器id"
|
||||
fun_srv_stop_client(){
|
||||
SERVER_NODE="client_server@172.18.160.${SERVER_ID}"
|
||||
INFO "关闭\e[92m${SERVER_NODE}\e[0;0m游戏节点..."
|
||||
WERL_NUM=`ps_num ${WERL}`
|
||||
${ERL} -noshell -name stop_server${WERL_NUM}@127.0.0.1 -setcookie ${DEF_COOKIE} -eval "rpc:call('${SERVER_NODE}', init, stop, [])" -s c q
|
||||
}
|
||||
|
||||
# 远程节点
|
||||
DOC[srv_remsh]="远程节点:参数:服务器id"
|
||||
fun_srv_remsh(){
|
||||
is_exists_server_id ${SERVER_ID}
|
||||
#关服
|
||||
SERVER_NODE=`show_server_node ${SERVER_ID}`
|
||||
INFO "连接ip:\e[92m${SERVER_NODE}\e[0;0m的游戏节点"
|
||||
WERL_NUM=`ps_num ${WERL}`
|
||||
${WERL} -name server${WERL_NUM}@127.0.0.1 -setcookie ${DEF_COOKIE} -remsh ${SERVER_NODE} &
|
||||
}
|
||||
|
||||
# 远程节点
|
||||
DOC[srv_remsh_client]="远程节点:参数:服务器id"
|
||||
fun_srv_remsh_client(){
|
||||
SERVER_NODE="client_server@172.18.160.${SERVER_ID}"
|
||||
INFO "连接ip:\e[92m${SERVER_NODE}\e[0;0m的游戏节点"
|
||||
WERL_NUM=`ps_num ${WERL}`
|
||||
${WERL} -name server${WERL_NUM}@127.0.0.1 -setcookie ${DEF_COOKIE} -remsh ${SERVER_NODE} &
|
||||
}
|
||||
|
||||
|
||||
# 编译
|
||||
DOC[srv_make]="编译游戏服务器 参数:服务器id"
|
||||
fun_srv_make(){
|
||||
lock_check srv_make
|
||||
cd ${ROOT}/server/server
|
||||
SERVER_NODE=`show_server_node ${SERVER_ID}`
|
||||
INFO "编译热更游戏服务器:\e[92m${SERVER_NODE}\e[0;0m "
|
||||
${REBAR} as ${DEF_SERVER} compile
|
||||
lock_release srv_make
|
||||
}
|
||||
|
||||
# 热更
|
||||
DOC[srv_up_make]="编译游戏服务器 参数:服务器id"
|
||||
fun_srv_up_make(){
|
||||
cd ${ROOT}/server/server
|
||||
SERVER_NODE=`show_server_node ${SERVER_ID}`
|
||||
INFO "编译热更游戏服务器:\e[92m${SERVER_NODE}\e[0;0m "
|
||||
erl_call -c node-cookie -n ${SERVER_NODE} -a "r3 compile" &
|
||||
}
|
||||
|
||||
# 分析
|
||||
DOC[srv_fprof]="生成分析文件: 分析时间"
|
||||
fun_srv_fprof(){
|
||||
INFO "生成分析文件..."
|
||||
if [ "${1}" = "" ]; then
|
||||
TIME=1
|
||||
else
|
||||
TIME=$1
|
||||
fi
|
||||
# 生成分享文件
|
||||
fun_srv_eval ${DEF_SERVER_ID} ms_tool fprof_all [${TIME}]
|
||||
# 分析文件目录
|
||||
LOGPATH=d:/work/trunk/server/server/log
|
||||
# 分析工具安装目录
|
||||
FENXIPATH=d:/app/erlang_fenxi
|
||||
# 生成分析文件名称
|
||||
FILENAME=callgrind.fprof-`server_time`
|
||||
|
||||
escript.exe ${FENXIPATH}/erlgrind ${LOGPATH}/fprof.trace ${FILENAME}
|
||||
mv ${FILENAME} ${FENXIPATH}/log
|
||||
cd ${FENXIPATH}/qcachegrind074-x86
|
||||
INFO "生成文件:${FILENAME}"
|
||||
./qcachegrind.exe ${FENXIPATH}/log/${FILENAME}
|
||||
}
|
||||
|
||||
|
||||
# 编译
|
||||
DOC[srv_eval]="指定服务器执行命令: 服务器id M F A "
|
||||
fun_srv_eval(){
|
||||
if [ "$2" = "" ]; then
|
||||
ERR "请输入命令"
|
||||
exit 1
|
||||
else
|
||||
M=$2
|
||||
fi
|
||||
if [ "$3" = "" ]; then
|
||||
ERR "请输入命令"
|
||||
exit 1
|
||||
else
|
||||
F=$3
|
||||
fi
|
||||
if [ "$4" = "" ]; then
|
||||
ERR "请输入命令"
|
||||
exit 1
|
||||
else
|
||||
A=$4
|
||||
fi
|
||||
SERVER_NODE=`show_server_node ${SERVER_ID}`
|
||||
WERL_NUM=`ps_num ${WERL}`
|
||||
INFO "rpc:call('${SERVER_NODE}', ${M}, ${F}, ${A})"
|
||||
${WERL} -name eval_server${WERL_NUM}@127.0.0.1 -setcookie ${DEF_COOKIE} -eval "rpc:call('${SERVER_NODE}', ${M}, ${F}, ${A})" -s c q
|
||||
}
|
||||
|
||||
|
||||
## 生成全量包
|
||||
DOC[srv_release]="生成全量包"
|
||||
fun_srv_release()
|
||||
{
|
||||
if [ ! -d ${PUB_ROOT} ]; then
|
||||
mkdir -p ${PUB_ROOT}
|
||||
fi
|
||||
|
||||
LAST_VERSION=`svn_version`
|
||||
if [ "${REL_VERSION}" = "" ] || [ "${REL_VERSION}" = "0" ]; then
|
||||
REL_VERSION=${LAST_VERSION}
|
||||
fi
|
||||
|
||||
OPT "========= LAST_VERSION=${LAST_VERSION}, REL_VERSION=${REL_VERSION} ========="
|
||||
|
||||
PRJ=`project_pwd`
|
||||
REL_PACKET=${PRJ}/${SERVER_TYPE}-${REL_VERSION}.tar.gz
|
||||
|
||||
if [ -f ${REL_PACKET} ]; then
|
||||
OPT "========= Release package for version ${REL_VERSION} already exists ========="
|
||||
else
|
||||
# 删除旧的rebar3执行脚本,一个版本一个脚本可能是为了启动不同版本设置,但我们用不上先删了
|
||||
CMD "========= remove old packet: rm -rf ${PRJ}/bin/game_server-* ========="
|
||||
rm -rf ${PRJ}/bin/${SERVER_TYPE}-*
|
||||
cd ${TMP_SOURCE} || exit 1
|
||||
OPT "========= Generating release package for version ${REL_VERSION} ========="
|
||||
CMD "========= ${REBAR} as ${SERVER_TYPE} release ========="
|
||||
${REBAR} as ${SERVER_TYPE} release || exit 1
|
||||
CMD "========= ${REBAR} as ${SERVER_TYPE} tar ========="
|
||||
${REBAR} as ${SERVER_TYPE} tar || exit 1
|
||||
# 删除旧发版包内容
|
||||
CMD "========= rm -rf ${PUB_ROOT}/* ========="
|
||||
rm -rf ${PUB_ROOT}/*
|
||||
fi
|
||||
|
||||
CMD "========= tar -zxf ${REL_PACKET} -C ${PUB_ROOT} ========="
|
||||
tar -zxf ${REL_PACKET} -C ${PUB_ROOT} || exit 1
|
||||
|
||||
# 删除bin下多余的文件,暂时先用手动删除,后面再研究能否用命令来删除
|
||||
CMD "========= rm -rf ${PUB_ROOT}/bin/${SERVER_TYPE}-* ========="
|
||||
rm -rf ${PUB_ROOT}/bin/${SERVER_TYPE}-*
|
||||
|
||||
cd ${ROOT}
|
||||
}
|
||||
|
||||
|
||||
|
||||
## 更新版本包
|
||||
DOC[srv_update]="更新版本包"
|
||||
fun_srv_update()
|
||||
{
|
||||
if [ ! -d ${PUB_ROOT} ]; then
|
||||
OPT "${PUB_ROOT} Not exists"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
PRJ=`project_pwd`
|
||||
|
||||
LAST_VERSION=`ls ${PRJ} | grep "game_server-" | sort -rg | head -1 | tr -cd "[0-9]"`
|
||||
if [ "${PREV_REL_REV}" = "" ] || [ "${PREV_REL_REV}" = "0" ]; then
|
||||
PREV_REL_REV=${LAST_VERSION}
|
||||
fi
|
||||
|
||||
OPT "========= LAST_VERSION=${LAST_VERSION}, PREV_REL_REV=${PREV_REL_REV} ========="
|
||||
REL_VERSION=`svn_version`
|
||||
|
||||
# 没有新版本可以升级
|
||||
if [ ${PREV_REL_REV} = ${REL_VERSION} ]; then
|
||||
OPT "Is latest version, do not need upgrade ..."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z ${PREV_REL_REV} ]; then
|
||||
OPT "No previous release ${PREV_REL_REV}, skip update package generation...."
|
||||
exit 1
|
||||
else
|
||||
# 删除旧包,有可能是其他版本升级到该版本的包
|
||||
CMD "========= remove old packet: rm -rf ${PRJ}/${SERVER_TYPE}-${REL_VERSION}.tar.gz ========="
|
||||
rm -rf ${PRJ}/${SERVER_TYPE}-${REL_VERSION}.tar.gz
|
||||
|
||||
# 删除旧的rebar3执行脚本,一个版本一个脚本可能是为了启动不同版本设置,但我们用不上先删了
|
||||
CMD "========= remove old packet: rm -rf ${PRJ}/bin/${SERVER_TYPE}-* ========="
|
||||
rm -rf ${PRJ}/bin/${SERVER_TYPE}-*
|
||||
|
||||
CMD "========= cd ${TMP_SOURCE} ========="
|
||||
cd ${TMP_SOURCE} || exit1
|
||||
|
||||
OPT "========= Generating update package for previous version ${PREV_REL_REV} ========="
|
||||
# 如果版本已经存在,则可能两次升级包基于的版本不同,需要先清理上次版本升级的信息
|
||||
if [ ${LAST_VERSION} = ${REL_VERSION} ]; then
|
||||
cmd "========= ${REBAR} as ${SERVER_TYPE} appup clean ========="
|
||||
${REBAR} as ${SERVER_TYPE} appup clean || exit 1
|
||||
fi
|
||||
CMD "========= ${REBAR} as ${SERVER_TYPE} release ========="
|
||||
${REBAR} as ${SERVER_TYPE} release || exit 1
|
||||
CMD "========= ${REBAR} as ${SERVER_TYPE} appup generate --previous_version=${PREV_REL_REV} ========="
|
||||
${REBAR} as ${SERVER_TYPE} appup generate --previous_version=${PREV_REL_REV} || exit 1
|
||||
CMD "========= ${REBAR} as ${SERVER_TYPE} relup --upfrom=${PREV_REL_REV} --relname=${SERVER_TYPE} --relvsn=${REL_VERSION} ========="
|
||||
${REBAR} as ${SERVER_TYPE} relup --upfrom=${PREV_REL_REV} --relname=${SERVER_TYPE} --relvsn=${REL_VERSION} || exit 1
|
||||
CMD "========= ${REBAR} as ${SERVER_TYPE} tar ========="
|
||||
${REBAR} as ${SERVER_TYPE} tar || exit 1
|
||||
fi
|
||||
|
||||
CMD "========= cp -f ${PRJ}/${SERVER_TYPE}-${REL_VERSION}.tar.gz ${PUB_ROOT}/releases/ ========="
|
||||
cp -f ${PRJ}/${SERVER_TYPE}-${REL_VERSION}.tar.gz ${PUB_ROOT}/releases/
|
||||
|
||||
|
||||
cd ${ROOT}
|
||||
}
|
||||
|
||||
|
||||
|
||||
# 发版全量包
|
||||
DOC[srv_pub]="发版全量包 参数:update or release"
|
||||
fun_srv_pub()
|
||||
{
|
||||
OPT "推送${VER}版本${SERVER_TYPE}升级包到外网"
|
||||
|
||||
fun_svn_update
|
||||
|
||||
if [ "${1}" = "update" ]; then
|
||||
fun_srv_update
|
||||
else
|
||||
fun_srv_release
|
||||
fi
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
error "生成升级压缩包失败,请检查"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cd ${ROOT}
|
||||
|
||||
OPT "更新完成,立刻发版${PUBNOW}"
|
||||
|
||||
#版署服也放在beta版本中
|
||||
if [ ${VER} = 'banshu' ]; then
|
||||
CMD "========= sh ${PUB_CMD} server ${PUSH_LANG} beta ${PLAT} ========="
|
||||
sh ${PUB_CMD} server ${PUSH_LANG} beta ${PLAT}
|
||||
else
|
||||
CMD "========= sh ${PUB_CMD} server ${PUSH_LANG} ${VER} ${PLAT} ========="
|
||||
sh ${PUB_CMD} server ${PUSH_LANG} ${VER} ${PLAT}
|
||||
fi
|
||||
}
|
||||
|
||||
## 重新部署,重启内网测试服
|
||||
DOC[srv_reboot]="重新部署,重启内网测试服"
|
||||
fun_srv_reboot(){
|
||||
OPT "更新重启${VER}版本${SERVER_TYPE}"
|
||||
|
||||
if [ ${SERVER_TYPE} = 'login_server' ]; then
|
||||
BIN_DIR=${SERVER_DIR}/${LOGIN_SERVER}/bin
|
||||
PUB_ROOT=${SERVER_DIR}/${LOGIN_SERVER}
|
||||
CONFIG_DIR=${SERVER_DIR}/config/${LOGIN_SERVER}
|
||||
elif [ ${SERVER_TYPE} = 'game_server' ]; then
|
||||
BIN_DIR=${SERVER_DIR}/${GAME_SERVER}/bin
|
||||
PUB_ROOT=${SERVER_DIR}/${GAME_SERVER}
|
||||
CONFIG_DIR=${SERVER_DIR}/config/${GAME_SERVER}
|
||||
else
|
||||
exit 1
|
||||
fi
|
||||
|
||||
fun_svn_update
|
||||
|
||||
CMD "========= 停服:srv_stop ========="
|
||||
fun_srv_stop
|
||||
|
||||
CMD "========= rm -rf ${PUB_ROOT}_old ========="
|
||||
rm -rf ${PUB_ROOT}_old
|
||||
CMD "========= rm -rf ${PUB_ROOT}/*.dump ========="
|
||||
rm -rf ${PUB_ROOT}/*.dump
|
||||
CMD "========= mv ${PUB_ROOT} ${PUB_ROOT}_old ========="
|
||||
mv ${PUB_ROOT} ${PUB_ROOT}_old
|
||||
|
||||
fun_srv_release
|
||||
|
||||
CMD "========= rm -rf ${PUB_ROOT}/sys.config ========="
|
||||
rm -rf ${PUB_ROOT}/sys.config
|
||||
CMD "========= cp ${CONFIG_DIR}/sys.config ${PUB_ROOT}/sys.config ========="
|
||||
cp ${CONFIG_DIR}/sys.config ${PUB_ROOT}/sys.config
|
||||
|
||||
CMD "========= rm -rf ${PUB_ROOT}/vm.args ========="
|
||||
rm -rf ${PUB_ROOT}/vm.args
|
||||
CMD "========= cp ${CONFIG_DIR}/vm.args ${PUB_ROOT}/vm.args ========="
|
||||
cp ${CONFIG_DIR}/vm.args ${PUB_ROOT}/vm.args
|
||||
|
||||
CMD "========= 重启:srv_start ========="
|
||||
|
||||
fun_srv_start
|
||||
|
||||
cd ${ROOT}
|
||||
}
|
||||
|
||||
# 热更内网测试服
|
||||
DOC[srv_reload]="热更内网测试服"
|
||||
fun_srv_reload(){
|
||||
OPT "热更${VER}版本${SERVER_TYPE}"
|
||||
|
||||
if [ ${SERVER_TYPE} = 'login_server' ]; then
|
||||
BIN_DIR=${SERVER_DIR}/${LOGIN_SERVER}/bin
|
||||
PUB_ROOT=${SERVER_DIR}/${LOGIN_SERVER}
|
||||
elif [ ${SERVER_TYPE} = 'game_server' ]; then
|
||||
BIN_DIR=${SERVER_DIR}/${GAME_SERVER}/bin
|
||||
PUB_ROOT=${SERVER_DIR}/${GAME_SERVER}
|
||||
else
|
||||
exit 1
|
||||
fi
|
||||
|
||||
fun_svn_update
|
||||
|
||||
PREV_REL_REV=`ls ${PUB_ROOT}/releases | grep -v RELEASES | grep -v "start_erl.data" | sort -rg | head -1`
|
||||
REL_VERSION=`svn_version`
|
||||
|
||||
if [ ${PREV_REL_REV} = ${REL_VERSION} ]; then
|
||||
OPT "运行的代码已经是最新版本,无需热更...."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
fun_srv_update
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
error "生成升级压缩包失败,请检查"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
sh ${BIN_DIR}/${SERVER_TYPE} upgrade ${REL_VERSION}
|
||||
|
||||
OPT "热更服务器成功......"
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# 获取进程数量
|
||||
ps_num(){
|
||||
ps -ef | grep ${1} | wc -l
|
||||
}
|
||||
|
||||
# 获取svn版本
|
||||
svn_version(){
|
||||
svn info ${TMP_SOURCE} | grep 'Last Changed Rev: ' | cut -d' ' -f4
|
||||
}
|
||||
|
||||
# 获取时间
|
||||
server_time(){
|
||||
date +%Y-%m-%d-%H-%M-%S
|
||||
}
|
||||
|
||||
# 获取路径
|
||||
project_pwd(){
|
||||
${TMP_SOURCE}/_build/${SERVER_TYPE}/rel/${SERVER_TYPE}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
#!/usr/bin/env bash
|
||||
#-------------------------------------------------
|
||||
# 命令脚本
|
||||
# @author lwt
|
||||
#-------------------------------------------------
|
||||
# 更新代码仓库
|
||||
DOC[svn_pull]="更新代码仓库,参数:要拉取的目录"
|
||||
fun_svn_pull(){
|
||||
INFO "执行命令:svn update ${1}"
|
||||
if [ "${1}" = "" ]; then
|
||||
DIRLIST=${ROOT}/*
|
||||
else
|
||||
DIRLIST=${ROOT}/${1}
|
||||
fi
|
||||
for K in ${DIRLIST}; do
|
||||
echo ---------------------------------------------
|
||||
INFO "正在更新\e[92m${K}文件\e[0;0m"
|
||||
echo ---------------------------------------------
|
||||
cd ${K} && ${SVN} update
|
||||
done
|
||||
}
|
||||
|
||||
|
||||
## 从svn下载对应的代码,并设置当前版本号
|
||||
DOC[svn_update]="从svn下载对应的代码,并设置当前版本号"
|
||||
fun_svn_update(){
|
||||
if [ -d ${TMP_SOURCE} ]; then
|
||||
OPT "${TMP_SOURCE} 目录已存在,svn update"
|
||||
CMD "========= svn up --force --accept tc ${TMP_SOURCE} --username ${USER} --password ${PASSWORD} ========="
|
||||
svn up --force --accept tc ${TMP_SOURCE} --username ${USER} --password ${PASSWORD}
|
||||
else
|
||||
OPT "${TMP_SOURCE} 目录不存在,创建并svn checkout"
|
||||
CMD "========= svn co ${SVN_BASE_URL} ${TMP_SOURCE} --username ${USER} --password ${PASSWORD} ========="
|
||||
mkdir -p ${TMP_SOURCE}
|
||||
svn co ${SVN_BASE_URL} ${TMP_SOURCE} --username ${USER} --password ${PASSWORD}
|
||||
fi
|
||||
|
||||
cd ${ROOT}
|
||||
}
|
||||
Reference in New Issue
Block a user