Get the shell script dir

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

#!/usr/bin/env bash ##----------------------------------------------------------- ## 命令分为多级命令:game web ##----------------------------------------------------------- ulimit -c unlimited ulimit -SHn 51200 ##获取脚本执行目录 here=`which "$0" 2>/dev/null || echo .` base="`dirname $here`" SHELL_DIR=`(cd "$base"; echo $PWD)` ## 测试本脚本是在源码目录下还是在发布目录下 if [ -f "$SHELL_DIR/version_server.txt" ] ; then IN_SRC_DIR=0 else IN_SRC_DIR=1 fi ERLANG_COOKIE=`cat ~/.erlang.cookie` ## 获取agent_name和server_name AGENT_NAME=`grep "agent_name" $SHELL_DIR/./setting/common.config | awk -F"," '{print $2}' | awk -F\" '{print $2}'` SERVER_NAME=`grep "server_name" $SHELL_DIR/./setting/common.config | awk -F"," '{print $2}' | awk -F\" '{print $2}'` ## 根目录设置 BASE_DIR="/data/dpcq_${AGENT_NAME}_${SERVER_NAME}" LOGS_DIR="/data/logs/${AGENT_NAME}_${SERVER_NAME}" MANAGER_LOG_FILE="${LOGS_DIR}/dpcq_manager.log" CONFIG_DIR="$SHELL_DIR/config" ## 发布后的各个目录 ======= begin ============= #### -- Server根目录 SERVER_DIR="${BASE_DIR}/server" #### -- Ebin目录设置 SERVER_EBIN="${SERVER_DIR}/ebin" #### -- 最终config目录设置 RELEASE_CONFIG_DIR="${SERVER_DIR}/config" #### -- 最终setting 目录 RELEASE_SETTING_DIR="${SERVER_DIR}/setting" ## 发布后的各个目录 ======= end ============= help () { echo "mgectl 使用说明" echo "基本语法: mgectl 命令模块 [option]" echo "命令模块:" echo "help 显示当前帮助内容" echo "web 游戏管理后台相关操作" echo "game 游戏服相关操作" echo "game_web 游戏服web页面相关操作" echo "debug debug相关操作" echo "live live相关操作" echo "stop stop相关操作" echo "start start相关操作" echo "backup mgeed 备份游戏" echo "stop_gateway manager 游戏踢人" echo "Receiver启动:./mgectl start mgeer 10001 [port必须大于1024]" echo "" exit 0 } cp_file() { if [ $IN_SRC_DIR ] ; then echo "拷贝配置及脚本文件到服务器运行目录" rm -rf $RELEASE_CONFIG_DIR mkdir -p $RELEASE_CONFIG_DIR mkdir -p $RELEASE_SETTING_DIR ## 创建manager.log文件 [ -d $LOGS_DIR/ ] || mkdir -p $LOGS_DIR/ [ ! -f $MANAGER_LOG_FILE ] || echo '' > $MANAGER_LOG_FILE [ -d $SERVER_EBIN/library/ ] || mkdir -p $SERVER_EBIN/library/ [ -d $SERVER_EBIN/proto/ ] || mkdir -p $SERVER_EBIN/proto/ \cp -rf $SHELL_DIR/ebin/proto $SERVER_EBIN/ rm -rf $SERVER_DIR/script/* mkdir -p $SERVER_DIR/script \cp -rf $SHELL_DIR/ebin/library/ $SERVER_EBIN/ echo $CONFIG_DIR \cp -rf $CONFIG_DIR/app/* $SERVER_EBIN/ \cp -rf $CONFIG_DIR $SERVER_DIR/ \cp -rf $SHELL_DIR/setting $SERVER_DIR/ \cp -rf $SHELL_DIR/mgectl $SERVER_DIR/ \cp -rf $SHELL_DIR/script $SERVER_DIR/ ## 删除所有svn文件 find $SERVER_DIR -type d -name "*.svn*" | xargs rm -rf else echo "非源码目录,不能执行拷贝文件操作" fi } make_make() { if [ $IN_SRC_DIR ] ; then echo "编译开始 ========================" #切换到代码根目录 cd $SHELL_DIR #切换到脚本目录 cd script make all echo "拷贝配置文件中..." cp_file echo "编译common源码中..." cd $SHELL_DIR/app/game/common/ make cd $SHELL_DIR/app/game/manager/ make cd $SHELL_DIR/app/game/behavior/ make cd $SHELL_DIR/app/game/chat/ make cd $SHELL_DIR/app/game/db/ make cd $SHELL_DIR/app/game/gateway/ make cd $SHELL_DIR/app/game/login/ make cd $SHELL_DIR/app/game/map/ make cd $SHELL_DIR/app/game/receiver/ make cd $SHELL_DIR/app/game/security/ make cd $SHELL_DIR/app/game/world/ make cd $SHELL_DIR/app/game/mgeeweb make cd $SHELL_DIR/app/game/merge make cd $SHELL_DIR/update make if [ "$1" != "no_config" ] ; then echo '将重新编译配置文件 ----(使用 ./mgectl make_erl命令可以避免编译配置)' cd $SHELL_DIR/script/ bash make_config_beam.sh bash make_mission_beam.sh else echo '你选择了不重新编译配置文件,请确认配置木有修改----(使用 ./mgectl make命令可以重新编译配置)' fi ##cp_file rm -rf $SERVER_EBIN/user_default.beam cp -rf $SERVER_EBIN/common/user_default.beam $SERVER_EBIN else echo "非源码目录,不能执行make操作" fi } make_help() { echo "mgectl game make 使用说明" echo "基本语法: mgectl game make [命令]" echo "命令为空则为直接编译项目" echo "命令模块:" echo "help 显示当前帮助内容" echo "clean 清理所有子项目编译内容" echo "dialyzer 运行所有子项目的dialyzer" echo "debug 以debug方式编译" echo "" exit 0 } make_clean() { if [ $IN_SRC_DIR ] ; then rm -f $SERVER_EBIN/config/* rm -f $SHELL_DIR/hrl/all_pb.hrl rm -f $SHELL_DIR/hrl/mm_define.hrl cd $SHELL_DIR/app/game/common/ make clean cd $SHELL_DIR/app/game/manager/ make clean cd $SHELL_DIR/app/game/behavior/ make clean cd $SHELL_DIR/app/game/chat/ make clean cd $SHELL_DIR/app/game/db/ make clean cd $SHELL_DIR/app/game/gateway/ make clean cd $SHELL_DIR/app/game/login/ make clean cd $SHELL_DIR/app/game/map/ make clean cd $SHELL_DIR/app/game/receiver/ make clean cd $SHELL_DIR/app/game/security/ make clean cd $SHELL_DIR/app/game/world/ make clean cd $SHELL_DIR/app/game/merge/ make clean cd $SHELL_DIR/app/game/mgeeweb make clean else echo "非源码目录,不能执行make clean操作" fi } make_dialyzer() { if [ $IN_SRC_DIR ] ; then cd $SHELL_DIR/app/game/common/ make dialyzer cd $SHELL_DIR/app/game/behavior/ make dialyzer cd $SHELL_DIR/app/game/chat/ make dialyzer cd $SHELL_DIR/app/game/db/ make dialyzer cd $SHELL_DIR/app/game/gateway/ make dialyzer cd $SHELL_DIR/app/game/login/ make dialyzer cd $SHELL_DIR/app/game/map/ make dialyzer cd $SHELL_DIR/app/game/receiver/ make dialyzer cd $SHELL_DIR/app/game/security/ make dialyzer cd $SHELL_DIR/app/game/world/ make dialyzer else echo "非源码目录,不能执行make dialyzer操作" fi } make_debug() { if [ $IN_SRC_DIR ] ; then cd $SHELL_DIR/app/game/common/ make debug cd $SHELL_DIR/app/game/behavior/ make debug cd $SHELL_DIR/app/game/chat/ make debug cd $SHELL_DIR/app/game/db/ make debug cd $SHELL_DIR/app/game/gateway/ make debug cd $SHELL_DIR/app/game/login/ make debug cd $SHELL_DIR/app/game/map/ make debug cd $SHELL_DIR/app/game/receiver/ make debug cd $SHELL_DIR/app/game/security/ make debug cd $SHELL_DIR/app/game/world/ make debug else echo "非源码目录,不能执行make debug操作" fi } make_map () { cd $SHELL_DIR/app/game/map/ make } sub_make () { ##继续检查是否还有参数,当前只识别几种参数 clean dialyzer debug if [ $# -ne 0 ] ; then MAKE_CODE=$1 case $MAKE_CODE in clean) make_clean ;; dialyzer) make_dialyzer ;; debug) make_debug ;; map) make_map ;; line) make_line ;; world) make_world ;; login) make_login ;; db) make_db ;; chat) make_chat ;; security) make_security ;; erlang_web) make_erlang_web ;; common) make_common ;; *) make_help ;; esac else make_make fi } if [ $# -eq 0 ]; then help fi game_make_erl(){ make_make no_config } game_cp_file(){ cp_file } game_rebuild() { if [ $IN_SRC_DIR ] ; then make_clean make_make else echo "非源码目录,不能执行rebuild操作" fi } game_help() { echo "mgectl game 使用说明" echo "基本语法: mgectl game 命令 [option]" echo "命令模块:" echo "help 显示当前帮助内容" echo "make 同make语法" echo "rebuild 重新编译,相当于 make clean && make" echo "" exit 0 } parse_game() { SUB_TARGET=$1 shift case $SUB_TARGET in help) game_help ;; make) sub_make $* ;; make_erl) game_make_erl ;; merl) game_make_erl ;; cp_file) game_cp_file ;; rebuild) game_rebuild ;; *) game_help ;; esac } live_app() { NODE=$1 SLAVE_NUM=$2 COMMAND=`php $SHELL_DIR/script/host_info.php get_live_command $NODE $SLAVE_NUM; exit $?` if [ $? -eq 0 ] ; then echo "$COMMAND" >> $MANAGER_LOG_FILE bash -c "$COMMAND" else echo $COMMAND; exit fi } start_app() { NODE=$1 SLAVE_NUM=$2 COMMAND=`php $SHELL_DIR/script/host_info.php get_start_command $NODE $SLAVE_NUM; exit $?` if [ $? -eq 0 ] ; then echo "$COMMAND" >> $MANAGER_LOG_FILE bash -c "$COMMAND" else echo $COMMAND; exit fi } start_paimai() { COMMAND=`php $SHELL_DIR/script/host_info.php get_paimai_command mgeeg_paimai ; exit $?` bash -c "$COMMAND" } start_game() { [ -d $LOGS_DIR/ ] || mkdir -p $LOGS_DIR/ [ ! -f $MANAGER_LOG_FILE ] || echo '' > $MANAGER_LOG_FILE if [ $# -ne 0 ] ; then TARGET_NODE=$1 SLAVE_NUM=$2 start_app $TARGET_NODE $SLAVE_NUM else ## 运行manager节点 start_app manager tail -f $MANAGER_LOG_FILE start_paimai fi } live_game() { if [ $# -ne 0 ] ; then TARGET_NODE=$1 SLAVE_NUM=$2 live_app $TARGET_NODE $SLAVE_NUM else ## 运行manager节点 live_app manager tail -f $MANAGER_LOG_FILE fi } send_notice() { CLOSED_TIME_LIMIT=$1 HOST=$2 MSG=$3 erl -noshell -name system@127.0.0.1 -setcookie $ERLANG_COOKIE -eval " \ Result = net_adm:ping('${HOST}'), if Result =:= pong -> lists:foreach( fun(N) -> rpc:call('${HOST}', common_misc, chat_broadcast_to_world, [29, 2901, {m_broadcast_general_toc, 2909, 2912, \"${MSG}\"++integer_to_list(N)++\"\"}]), timer:sleep(1000) end, lists:reverse(lists:seq(1, ${CLOSED_TIME_LIMIT}))); true -> ignore end, init:stop(). " } stop_all() { stop_app manager } stop_app() { NODE=$1 COMMAND=`php $SHELL_DIR/script/host_info.php get_stop_command $NODE; exit $?` if [ $? -eq 0 ] ; then bash -c "$COMMAND" else echo $COMMAND; exit fi } stop_game() { if [ $# -ne 0 ] ; then stop_app $1 else stop_all fi } debug_app() { NODE=$1 REAL_IP=$2 COMMAND=`php $SHELL_DIR/script/host_info.php get_debug_command $NODE $REAL_IP; exit $?` if [ $? -eq 0 ] ; then bash -c "$COMMAND" else echo $COMMAND; exit fi } debug_game() { if [ $# -ne 0 ] ; then debug_app $1 $2 else help fi } backup() { NODE=$1 COMMAND=`php $SHELL_DIR/script/host_info.php backup $NODE; exit $?` if [ $? -eq 0 ] ; then bash -c "$COMMAND" else echo $COMMAND; exit fi } start_gateway() { NODE=$1 COMMAND=`php $SHELL_DIR/script/host_info.php start_gateway $NODE; exit $?` if [ $? -eq 0 ] ; then bash -c "$COMMAND" else echo $COMMAND; exit fi } stop_gateway() { NODE=$1 COMMAND=`php $SHELL_DIR/script/host_info.php stop_gateway $NODE; exit $?` if [ $? -eq 0 ] ; then bash -c "$COMMAND" else echo $COMMAND; exit fi } ## 重新载入配置文件 reload_config() { FILE=$1 COMMAND=`php $SHELL_DIR/script/host_info.php reload_config manager $FILE; exit $?` if [ $? -eq 0 ] ; then bash -c "$COMMAND" else echo $COMMAND; exit fi } hot_update() { FILE=$1 COMMAND=`php $SHELL_DIR/script/host_info.php hot_update manager $FILE; exit $?` if [ $? -eq 0 ] ; then bash -c "$COMMAND" else echo $COMMAND; exit fi } mnesia_update() { MODULE=$1 METHOD=$2 COMMAND=`php $SHELL_DIR/script/host_info.php mnesia_update mgeed $MODULE $METHOD; exit $?` if [ $? -eq 0 ] ; then bash -c "$COMMAND" result=$? case $result in 0) :;; 1) :;; 2) help;; 3) help;; 4) echo "${AGENT_NAME}_${SERVER_NAME}:mnesia updating!";; 5) echo "${AGENT_NAME}_${SERVER_NAME}:mnesia update done!";; 6) echo "${AGENT_NAME}_${SERVER_NAME}:mnesia update error!";; esac return $result else echo $COMMAND; exit fi } func() { FILE=$1 COMMAND=`php $SHELL_DIR/script/host_info.php func manager $FILE $2; exit $?` if [ $? -eq 0 ] ; then bash -c "$COMMAND" else echo $COMMAND; exit fi } func_all() { FILE=$1 COMMAND=`php $SHELL_DIR/script/host_info.php func_all manager $FILE $2; exit $?` if [ $? -eq 0 ] ; then bash -c "$COMMAND" else echo $COMMAND; exit fi } ## 管理功能 mananger() { COMMAND=$1 shift case $COMMAND in reload_config) reload_config $*;; hot_update) hot_update $*;; mnesia_update) mnesia_update $*;; func ) func $*;; func_all ) func_all $*;; *) help ;; esac } ## 获取子shell命令 TARGET=$1 shift case $TARGET in help) help ;; web) shift ;; game) parse_game $* ;; make) sub_make $* ;; make_erl) game_make_erl $* ;; merl) game_make_erl $* ;; cp_file) game_cp_file $* ;; rebuild) game_rebuild $* ;; start) start_game $*;; paimai) start_paimai $*;; live) live_game $*;; stop) stop_game $*;; debug) debug_game $*;; backup) backup $*;; start_gateway) start_gateway $*;; stop_gateway) stop_gateway $*;; manager) mananger $*;; *) help ;; esac mgectl脚本,有合区相关脚本吗
08-31
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值