| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- #!/bin/bash
- # 该脚本从数据库每5分钟读取一次开服信息,并根据开服时间自动安装节点以及开服
- # crontab -e 里面配置
- #*/5 * * * * cd /data/server && sh ./auto_open_new.sh > /data/server/open_log.log 2>&1
- # 数据库配置
- DB_HOST="127.0.0.1"
- DB_PORT="3306"
- DB_USER="root"
- DB_PASS="xxxx"
- DB_NAME="sdk"
- TB_NAME="game_server"
- # 服务路径
- SRV_SOURCE="/data/server"
- # 当前时间戳
- CUR_SEC=$(date '+%s')
- CUR_SEC_L=$((CUR_SEC - 600))
- # SQL 查询语句
- SELECT_SQL="SELECT zone_id, open_time, srv_status, db_name FROM ${TB_NAME}"
- # 获取查询结果
- RESULT=($(mysql -h${DB_HOST} -P${DB_PORT} -u${DB_USER} -p${DB_PASS} -D${DB_NAME} -N -e "${SELECT_SQL}"))
- # 检查是否有结果
- if [ ${#RESULT[@]} -eq 0 ]; then
- echo "No data found in the database."
- exit 1
- fi
- # 处理查询结果
- for (( i=0; i<${#RESULT[@]}; i+=4 )); do
- ZONE_ID=${RESULT[i]}
- OPEN_TIME=${RESULT[i+1]}
- SRV_STATUS=${RESULT[i+2]}
- DB_NAME=${RESULT[i+3]}
- # 将开服时间转化为时间戳
- OPEN_TIME_SEC=$(date -d "${OPEN_TIME}" '+%s')
- OPEN_TIME_BEFORE_10M=$((OPEN_TIME_SEC - 600))
- OPEN_TIME_AFTER_10M=$((OPEN_TIME_SEC + 600))
- # 判断是否在开服时间前后10分钟内
- if [ ${OPEN_TIME_BEFORE_10M} -lt ${CUR_SEC} ] && [ ${OPEN_TIME_AFTER_10M} -gt ${CUR_SEC} ]; then
- cd ${SRV_SOURCE}
- sh srv.sh srv_install ${ZONE_ID}
- echo "$(date) 开服成功 ZONE_ID=${ZONE_ID} OPEN_TIME=${OPEN_TIME} CUR_SEC=${CUR_SEC}" >> test.txt
- elif [ ${CUR_SEC} -gt ${OPEN_TIME_AFTER_10M} ] && [ ${SRV_STATUS} -ne 1 ]; then
- cd ${SRV_SOURCE}
- echo "$(date) 检测 ZONE_ID=${ZONE_ID}" >> test.txt
- else
- echo "$(date) 未到开服时间标准 ZONE_ID=${ZONE_ID}" >> test.txt
- fi
- done
- echo "自动脚本结束" >> test.txt
|