#!/usr/bin/env bash # @author 郑宏伟 # @brief MACOS服务器启动脚本 ____APP_START_CONF_NAME=".app.mac.cfg" SCRIPT_PATH="$(cd "`dirname "$0"`" && pwd)" FRAMEWORK_PATH="`dirname "${SCRIPT_PATH}"`" # .../framework MISC_SCRIPTS_PATH="${SCRIPT_PATH}/misc_scripts" # .../misc_scripts function _log() { echo "[Log] $@" } function EnvEnsure() { local os_type=`uname` if [ $os_type != "Darwin" ];then _log "illegal os: $os_type" exit 1 fi local cpu=`sysctl -n machdep.cpu.core_count` export SKYNET_THREAD=`expr ${cpu} \* 2` } function Main() { ParseAgrs $@ CreateConfigFile ${____APP_START_CONF_NAME} EnvEnsure ${FRAMEWORK_PATH}/skynet/skynet ${____APP_START_CONF_NAME} "${ARG_TYPE}-${ARG_PRO}-${ARG_ENV}" } function Help() { echo 'Usage:' echo 'start_server.sh -p 应用项目 -e 应用环境 -t 应用类型 [-d DBCONF名]' echo 'Options:' echo ' -p 必需 应用项目' echo ' 奥斯曼大帝国:boe' echo ' 西部:ww' echo ' -e 必需 应用环境' echo ' 开发环境:dev' echo ' 集成测试:sit' echo ' 产品环境:pro' echo ' -t 必需 应用类型' echo ' 游戏服:gs' echo ' 登录服:ls' echo ' 全局服:ms' echo ' WEB服:ws' echo ' -d 可选 DBCONF名' } function ProjectAdapter() { case ${1} in boe|ww) ARG_PRO="$OPTARG";; ?) _log "未知[应用项目]参数" exit 1 ;; esac } function EnvAdapter() { case ${1} in dev|sit|pro) ARG_ENV="$OPTARG";; ?) _log "未知[应用环境]参数" exit 1 ;; esac } function TypeAdapter() { case ${1} in ls) ARG_TYPE="$OPTARG" ARG_START_CONF=login/snconfig ;; ms) ARG_TYPE="$OPTARG" ARG_START_CONF=global/snconfig ;; ws) ARG_TYPE="$OPTARG" ARG_START_CONF=web/webconf ;; gs|rw|cp) ARG_TYPE="$OPTARG" ARG_START_CONF=game/snconfig ;; ?) _log "未知[应用类型]参数" exit 1 ;; esac } function ParseAgrs() { while getopts :p:e:t:hd: OPT do case $OPT in p) ProjectAdapter $OPTARG;; e) EnvAdapter $OPTARG;; t) TypeAdapter $OPTARG;; d) DBCONF_NAME="$OPTARG";; h) Help;exit 0;; ?) _log "未知参数" exit 1 ;; esac done } function auto_update_db() { local dbconf="dbconf" if [[ ! -z ${DBCONF_NAME} ]]; then dbconf="${DBCONF_NAME}" fi if [[ -z ${dbconf} ]]; then _log "dbconf name err" exit 1 fi if [[ ${ARG_ENV} == "dev" && ${ARG_TYPE} == "ms" ]]; then sh ${MISC_SCRIPTS_PATH}/mac_logic_updatedb.sh ${dbconf} fi } function CreateConfigFile() { local STARTFILE=${1} if [[ -z ${ARG_PRO} || -z ${ARG_ENV} || -z ${ARG_TYPE} ]]; then _log "缺少参数";exit 2; fi rm -rf ${STARTFILE} cat >> ./${STARTFILE} << EOF include "framework/snconfig" include "${ARG_START_CONF}" app_type="${ARG_TYPE}" app_project="${ARG_PRO}" app_env="${ARG_ENV}" EOF if [[ ! -z ${DBCONF_NAME} ]]; then echo "dbconf=\"${DBCONF_NAME}\"" >> ./${STARTFILE} fi # 自动更新数据库文件 auto_update_db } Main $@