auto_open_new.sh 1.7 KB

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