|
@@ -12,7 +12,7 @@ JENKINS_PATH="/data/shell/jenkins"
|
|
|
|
|
|
|
|
# 参数解析
|
|
# 参数解析
|
|
|
usage() {
|
|
usage() {
|
|
|
- echo "Usage: $0 -x <server_id> -p <port> -r <redis_id>"
|
|
|
|
|
|
|
+ echo "Usage: $0 -s <server_id> -p <port> -r <redis_id>"
|
|
|
exit 1
|
|
exit 1
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -45,21 +45,33 @@ done
|
|
|
# 颜色输出
|
|
# 颜色输出
|
|
|
RED='\033[0;31m'
|
|
RED='\033[0;31m'
|
|
|
GREEN='\033[0;32m'
|
|
GREEN='\033[0;32m'
|
|
|
|
|
+YELLOW='\033[0;33m'
|
|
|
NC='\033[0m' # No Color
|
|
NC='\033[0m' # No Color
|
|
|
|
|
|
|
|
# 1. MySQL数据库操作
|
|
# 1. MySQL数据库操作
|
|
|
echo -e "${GREEN}Step 1: MySQL Database Setup...${NC}"
|
|
echo -e "${GREEN}Step 1: MySQL Database Setup...${NC}"
|
|
|
-DB_NAME="ro${SERVER_ID}"
|
|
|
|
|
|
|
+DB_NAME="ro${REDIS_ID}"
|
|
|
|
|
+
|
|
|
|
|
+# 创建数据库(如果不存在)
|
|
|
mysql -u${MYSQL_ROOT} -p${MYSQL_PWD} -e "CREATE DATABASE IF NOT EXISTS ${DB_NAME};"
|
|
mysql -u${MYSQL_ROOT} -p${MYSQL_PWD} -e "CREATE DATABASE IF NOT EXISTS ${DB_NAME};"
|
|
|
if [ $? -ne 0 ]; then
|
|
if [ $? -ne 0 ]; then
|
|
|
echo -e "${RED}Error: Failed to create database${NC}"
|
|
echo -e "${RED}Error: Failed to create database${NC}"
|
|
|
exit 1
|
|
exit 1
|
|
|
fi
|
|
fi
|
|
|
|
|
|
|
|
-mysql -u${MYSQL_ROOT} -p${MYSQL_PWD} ${DB_NAME} < ${SQL_FILE}
|
|
|
|
|
-if [ $? -ne 0 ]; then
|
|
|
|
|
- echo -e "${RED}Error: Failed to import SQL file${NC}"
|
|
|
|
|
- exit 1
|
|
|
|
|
|
|
+# 检查数据库中是否有表
|
|
|
|
|
+TABLE_COUNT=$(mysql -u${MYSQL_ROOT} -p${MYSQL_PWD} -N -e "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema='${DB_NAME}';")
|
|
|
|
|
+
|
|
|
|
|
+if [ "$TABLE_COUNT" -gt 0 ]; then
|
|
|
|
|
+ echo -e "${YELLOW}Database ${DB_NAME} already has tables, skipping SQL import...${NC}"
|
|
|
|
|
+else
|
|
|
|
|
+ echo -e "${GREEN}Importing SQL file to ${DB_NAME}...${NC}"
|
|
|
|
|
+ mysql -u${MYSQL_ROOT} -p${MYSQL_PWD} ${DB_NAME} < ${SQL_FILE}
|
|
|
|
|
+ if [ $? -ne 0 ]; then
|
|
|
|
|
+ echo -e "${RED}Error: Failed to import SQL file${NC}"
|
|
|
|
|
+ exit 1
|
|
|
|
|
+ fi
|
|
|
|
|
+ echo -e "${GREEN}SQL import completed successfully${NC}"
|
|
|
fi
|
|
fi
|
|
|
|
|
|
|
|
# 2. 创建服务器目录
|
|
# 2. 创建服务器目录
|
|
@@ -99,31 +111,28 @@ HTTP_PORT=$(awk -F': ' '/httpaddr:/ {print $2}' ${SERVER_DIR}/gmweb_config.yaml
|
|
|
#sed -i "s/^loglevel:.*/loglevel: debug/" ${GAME_CONFIG}
|
|
#sed -i "s/^loglevel:.*/loglevel: debug/" ${GAME_CONFIG}
|
|
|
#sed -i "s/^authmode:.*/authmode: 2/" ${GAME_CONFIG}
|
|
#sed -i "s/^authmode:.*/authmode: 2/" ${GAME_CONFIG}
|
|
|
#sed -i "/^paycallback:/c \ paycallback: $TARGET_VALUE" "$GAME_CONFIG"
|
|
#sed -i "/^paycallback:/c \ paycallback: $TARGET_VALUE" "$GAME_CONFIG"
|
|
|
-sed -i "s/152.32.220.85:8003/${PUBLIC_IP}:${HTTP_PORT}/g" "$GAME_CONFIG"
|
|
|
|
|
-sed -i "s/hwQucik/gnQucik/g" "$GAME_CONFIG"
|
|
|
|
|
|
|
+#sed -i "s/152.32.220.85:8003/${PUBLIC_IP}:${HTTP_PORT}/g" "$GAME_CONFIG"
|
|
|
|
|
+#sed -i "s/hwQucik/gnQucik/g" "$GAME_CONFIG"
|
|
|
|
|
|
|
|
# 5. 启动服务器
|
|
# 5. 启动服务器
|
|
|
echo -e "${GREEN}Step 5: Starting server...${NC}"
|
|
echo -e "${GREEN}Step 5: Starting server...${NC}"
|
|
|
cd ${SERVER_DIR} || exit
|
|
cd ${SERVER_DIR} || exit
|
|
|
-./start.sh
|
|
|
|
|
|
|
+#./start.sh
|
|
|
sleep 5
|
|
sleep 5
|
|
|
|
|
|
|
|
# 检查PID文件
|
|
# 检查PID文件
|
|
|
-PID_COUNT=$(ls ${SERVER_DIR}/*.pid 2>/dev/null | wc -l)
|
|
|
|
|
-if [ "$PID_COUNT" -ne 13 ]; then
|
|
|
|
|
- echo -e "${RED}Error: Failed to start all services (found ${PID_COUNT}/13 PIDs)${NC}"
|
|
|
|
|
- exit 1
|
|
|
|
|
-fi
|
|
|
|
|
|
|
+#PID_COUNT=$(ls ${SERVER_DIR}/*.pid 2>/dev/null | wc -l)
|
|
|
|
|
+#if [ "$PID_COUNT" -ne 13 ]; then
|
|
|
|
|
+# echo -e "${RED}Error: Failed to start all services (found ${PID_COUNT}/13 PIDs)${NC}"
|
|
|
|
|
+# exit 1
|
|
|
|
|
+#fi
|
|
|
|
|
|
|
|
# 6. 更新服务器列表
|
|
# 6. 更新服务器列表
|
|
|
echo -e "${GREEN}Step 6: Updating server list...${NC}"
|
|
echo -e "${GREEN}Step 6: Updating server list...${NC}"
|
|
|
-SERVERLIST_FILE="${BUILD_DATA}/severlist.yaml"
|
|
|
|
|
-INSERT_CONTENT="{serverid: ${SERVER_ID}, servername: 冒险$((SERVER_ID + 1))服, ip: $PUBLIC_IP, port: [$((PORT + 21000))], type: 0, stime: \"2024-12-25 12:00:00\", state: 0, invisible: 0},"
|
|
|
|
|
|
|
+SERVERLIST_FILE="${BUILD_DATA}/serverlist.yaml"
|
|
|
|
|
+INSERT_CONTENT="{serverid: ${SERVER_ID}, servername: S${SERVER_ID}, ip: $PUBLIC_IP, port: [$((PORT + 21000))], type: 0, stime: \"2024-12-25 12:00:00\", state: 0, invisible: 0},"
|
|
|
#sed -i "/serverlist:/a \ \ - name: server${SERVER_ID}\n id: ${SERVER_ID}\n ip: 0.0.0.0\n port: ${PORT}" ${SERVERLIST_FILE}
|
|
#sed -i "/serverlist:/a \ \ - name: server${SERVER_ID}\n id: ${SERVER_ID}\n ip: 0.0.0.0\n port: ${PORT}" ${SERVERLIST_FILE}
|
|
|
|
|
|
|
|
-# 启用安全模式
|
|
|
|
|
-set -uo pipefail
|
|
|
|
|
-
|
|
|
|
|
# 第二行插入操作(保留原内容)
|
|
# 第二行插入操作(保留原内容)
|
|
|
awk -v new="$INSERT_CONTENT" '
|
|
awk -v new="$INSERT_CONTENT" '
|
|
|
BEGIN {
|
|
BEGIN {
|
|
@@ -149,66 +158,77 @@ BEGIN {
|
|
|
' "$SERVERLIST_FILE" > "${SERVERLIST_FILE}.tmp" && mv "${SERVERLIST_FILE}.tmp" "$SERVERLIST_FILE"
|
|
' "$SERVERLIST_FILE" > "${SERVERLIST_FILE}.tmp" && mv "${SERVERLIST_FILE}.tmp" "$SERVERLIST_FILE"
|
|
|
|
|
|
|
|
# 7. GM/Jenkins配置
|
|
# 7. GM/Jenkins配置
|
|
|
-# 这里脚本不太好处理,暂时手动
|
|
|
|
|
echo -e "${GREEN}Step 7: Configuring GM and Jenkins...${NC}"
|
|
echo -e "${GREEN}Step 7: Configuring GM and Jenkins...${NC}"
|
|
|
PHP_CONFIG_PATH="/www/wwwroot/game/ht/gm/user/config.php"
|
|
PHP_CONFIG_PATH="/www/wwwroot/game/ht/gm/user/config.php"
|
|
|
|
|
|
|
|
-content_config=$(printf "%s\n" \
|
|
|
|
|
-"'%s'=>array(
|
|
|
|
|
- 'name'=>'%s区',
|
|
|
|
|
|
|
+# 修正:使用正确的字符串拼接方式,避免printf产生多余输出
|
|
|
|
|
+content_config="'$((SERVER_ID + 1000))'=>array(
|
|
|
|
|
+ 'name'=>'${SERVER_ID}区',
|
|
|
'db_ip'=>'127.0.0.1',
|
|
'db_ip'=>'127.0.0.1',
|
|
|
'db_port'=>3306,
|
|
'db_port'=>3306,
|
|
|
- 'db_name'=>'ro%s',
|
|
|
|
|
|
|
+ 'db_name'=>'ro${REDIS_ID}',
|
|
|
'db_user'=>'root',
|
|
'db_user'=>'root',
|
|
|
'db_pswd'=>'123456',
|
|
'db_pswd'=>'123456',
|
|
|
'hidde'=>false // false是开 true是关
|
|
'hidde'=>false // false是开 true是关
|
|
|
-)," ${REDIS_ID}+1000 ${REDIS_ID} ${REDIS_ID})
|
|
|
|
|
-
|
|
|
|
|
-# 获取文件总行数
|
|
|
|
|
-total_lines=$(wc -l < "$PHP_CONFIG_PATH")
|
|
|
|
|
-# 检查文件是否有足够行数
|
|
|
|
|
-if [ "$total_lines" -lt 3 ]; then
|
|
|
|
|
- echo "错误:文件行数不足,无法插入到倒数第四行。"
|
|
|
|
|
- exit 1
|
|
|
|
|
-fi
|
|
|
|
|
-# 计算目标行号(倒数第四行)
|
|
|
|
|
-target_line=$((total_lines - 2))
|
|
|
|
|
-# 使用ed编辑器插入内容
|
|
|
|
|
-ed -s "$PHP_CONFIG_PATH" <<EOF
|
|
|
|
|
|
|
+),"
|
|
|
|
|
+
|
|
|
|
|
+# 检查是否已经存在相同的配置,如果存在则跳过
|
|
|
|
|
+if grep -q "'ro${REDIS_ID}'" "$PHP_CONFIG_PATH" 2>/dev/null; then
|
|
|
|
|
+ echo -e "${YELLOW} Configuration for ro${REDIS_ID} already exists in config.php, skipping...${NC}"
|
|
|
|
|
+else
|
|
|
|
|
+ # 获取文件总行数
|
|
|
|
|
+ total_lines=$(wc -l < "$PHP_CONFIG_PATH")
|
|
|
|
|
+ # 检查文件是否有足够行数
|
|
|
|
|
+ if [ "$total_lines" -lt 3 ]; then
|
|
|
|
|
+ echo "错误:文件行数不足,无法插入到倒数第四行。"
|
|
|
|
|
+ exit 1
|
|
|
|
|
+ fi
|
|
|
|
|
+ # 计算目标行号(倒数第二行)
|
|
|
|
|
+ target_line=$((total_lines - 2))
|
|
|
|
|
+ # 使用ed编辑器插入内容
|
|
|
|
|
+ ed -s "$PHP_CONFIG_PATH" <<EOF
|
|
|
${target_line}i
|
|
${target_line}i
|
|
|
$content_config
|
|
$content_config
|
|
|
.
|
|
.
|
|
|
w
|
|
w
|
|
|
q
|
|
q
|
|
|
EOF
|
|
EOF
|
|
|
-echo -e "${GREEN} 文件 $PHP_CONFIG_PATH 已修改成功!${NC}"
|
|
|
|
|
|
|
+ echo -e "${GREEN} 文件 $PHP_CONFIG_PATH 已修改成功!${NC}"
|
|
|
|
|
+fi
|
|
|
|
|
|
|
|
PHP_GMQUERY_PATH="/www/wwwroot/game/ht/gm/user/gmquery.php"
|
|
PHP_GMQUERY_PATH="/www/wwwroot/game/ht/gm/user/gmquery.php"
|
|
|
-case_number=$((1000 + REDIS_ID))
|
|
|
|
|
|
|
+case_number=$((1000 + SERVER_ID))
|
|
|
port=$((8000 + PORT))
|
|
port=$((8000 + PORT))
|
|
|
-tmpfile=$(mktemp)
|
|
|
|
|
-cat > "$tmpfile" <<'EOF'
|
|
|
|
|
- case "CASENUMBER":
|
|
|
|
|
- $mailurl = 'http://126.0.0.1:PORT/gm/mail?type=add&uid='.$userid.'&title='.$title.'&content='.$content.'&reward='.$reward.'&senddate=2023-03-28%2014:04:00';
|
|
|
|
|
- break;
|
|
|
|
|
-EOF
|
|
|
|
|
-
|
|
|
|
|
-# 替换占位符并保留原有$符号
|
|
|
|
|
-sed -i "s/CASENUMBER/$case_number/g; s/PORT/$port/g" "$tmpfile"
|
|
|
|
|
-# 使用ed精确插入到第188行(保留原内容)测试服是101行,0.1是188行
|
|
|
|
|
-ed -s "$PHP_GMQUERY_PATH" <<ED_SCRIPT
|
|
|
|
|
-101r $tmpfile
|
|
|
|
|
-w
|
|
|
|
|
-q
|
|
|
|
|
-ED_SCRIPT
|
|
|
|
|
-
|
|
|
|
|
-# 清理临时文件
|
|
|
|
|
-rm "$tmpfile"
|
|
|
|
|
-echo -e "${GREEN} 文件 $PHP_GMQUERY_PATH 已修改成功!${NC}"
|
|
|
|
|
|
|
|
|
|
|
|
+# 检查是否已经存在相同的 case,如果存在则跳过
|
|
|
|
|
+if grep -q "case \"$case_number\":" "$PHP_GMQUERY_PATH" 2>/dev/null; then
|
|
|
|
|
+ echo -e "${YELLOW} Case $case_number already exists in gmquery.php, skipping...${NC}"
|
|
|
|
|
+else
|
|
|
|
|
+ # 找到 default 所在的行号,在它之前插入
|
|
|
|
|
+ default_line=$(grep -n "default:" "$PHP_GMQUERY_PATH" | head -1 | cut -d: -f1)
|
|
|
|
|
+
|
|
|
|
|
+ if [ -z "$default_line" ]; then
|
|
|
|
|
+ echo -e "${RED}Error: Cannot find 'default:' line in gmquery.php${NC}"
|
|
|
|
|
+ exit 1
|
|
|
|
|
+ fi
|
|
|
|
|
+
|
|
|
|
|
+ # 在 default 行之前插入新的 case
|
|
|
|
|
+ sed -i "${default_line}i\\
|
|
|
|
|
+ case \"$case_number\":\\
|
|
|
|
|
+ \$mailurl = 'http://127.0.0.1:${port}/gm/mail?type=add&uid='.\$userid.'&title='.\$title.'&content='.\$content.'&reward='.\$reward.'&senddate=2023-03-28%2014:04:00';\\
|
|
|
|
|
+ break;\\
|
|
|
|
|
+" "$PHP_GMQUERY_PATH"
|
|
|
|
|
+
|
|
|
|
|
+ echo -e "${GREEN} 文件 $PHP_GMQUERY_PATH 已修改成功!${NC}"
|
|
|
|
|
+fi
|
|
|
|
|
|
|
|
-# Jenkins配置
|
|
|
|
|
|
|
+# Jenkins配置 - 检查是否已存在
|
|
|
JENKINS_FILE="${JENKINS_PATH}/serverlist"
|
|
JENKINS_FILE="${JENKINS_PATH}/serverlist"
|
|
|
-echo "${SERVER_ID},http://$PUBLIC_IP:${PORT},ro${REDIS_ID}" >> ${JENKINS_FILE}
|
|
|
|
|
|
|
+if grep -q "^${SERVER_ID}," "$JENKINS_FILE" 2>/dev/null; then
|
|
|
|
|
+ echo -e "${YELLOW} Server ${SERVER_ID} already exists in Jenkins serverlist, skipping...${NC}"
|
|
|
|
|
+else
|
|
|
|
|
+ echo "${SERVER_ID},http://$PUBLIC_IP:${port},ro${REDIS_ID}" >> ${JENKINS_FILE}
|
|
|
|
|
+ echo -e "${GREEN} Jenkins serverlist updated${NC}"
|
|
|
|
|
+fi
|
|
|
|
|
|
|
|
echo -e "${GREEN}✅ Server ${SERVER_ID} setup completed successfully!${NC}"
|
|
echo -e "${GREEN}✅ Server ${SERVER_ID} setup completed successfully!${NC}"
|