From 895aee053e42a57e79b8251b79101cdb6105ad84 Mon Sep 17 00:00:00 2001 From: jingrow Date: Sun, 10 Aug 2025 22:35:08 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=88=9B=E5=BB=BAjsite?= =?UTF-8?q?=E5=90=8Esite=5Fport.json=E6=96=87=E4=BB=B6=E6=A0=BC=E5=BC=8F?= =?UTF-8?q?=E9=94=99=E8=AF=AF=E9=97=AE=E9=A2=98=E5=8F=8A=E6=89=A7=E8=A1=8C?= =?UTF-8?q?=E5=88=A0=E9=99=A4jiste=E5=90=8E=E9=9C=80=E8=A6=81=E8=84=9A?= =?UTF-8?q?=E6=9C=AC=E9=87=8C=E9=9D=A2=E5=91=BD=E4=BB=A4=E9=9C=80=E8=A6=81?= =?UTF-8?q?=E4=BA=A4=E4=BA=92=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jsite.sh | 74 +++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 55 insertions(+), 19 deletions(-) diff --git a/jsite.sh b/jsite.sh index b825785..ef5a6d9 100644 --- a/jsite.sh +++ b/jsite.sh @@ -546,13 +546,20 @@ save_port_assignment() { echo "{\"$site_name\": $port}" > "$port_file" fi else - # 如果没有jq,使用简单的文本处理 + # 如果没有jq,使用更安全的文本处理方式 if [ -f "$port_file" ]; then - # 移除已存在的条目(如果存在) - grep -v "\"$site_name\"" "$port_file" > "${port_file}.tmp" 2>/dev/null || true - mv "${port_file}.tmp" "$port_file" - # 在最后一个大括号前添加新条目 - sed -i "s/}$/ \"$site_name\": $port\n}/" "$port_file" 2>/dev/null || echo "{\"$site_name\": $port}" > "$port_file" + # 提取现有条目并重新构建 + local existing_entries=$(grep -o '"[^"]*"[[:space:]]*:[[:space:]]*[0-9]*' "$port_file" 2>/dev/null | grep -v "\"$site_name\"" || echo "") + + # 重新构建JSON文件 + echo "{" > "$port_file" + if [ -n "$existing_entries" ]; then + echo "$existing_entries" | sed 's/$/,/' | head -n -1 >> "$port_file" + echo "$existing_entries" | tail -n 1 >> "$port_file" + echo "," >> "$port_file" + fi + echo " \"$site_name\": $port" >> "$port_file" + echo "}" >> "$port_file" else # 创建新文件 echo "{\"$site_name\": $port}" > "$port_file" @@ -1430,44 +1437,73 @@ create_site() { # 删除网站 delete_site() { - log_info "即将删除网站: $SITE_NAME" - read -p "确认删除?(y/N): " confirm - - if [ "$confirm" != "y" ] && [ "$confirm" != "Y" ]; then - log_info "取消删除操作" - return 0 - fi + log_info "开始删除网站: $SITE_NAME" # 停止PM2进程 local status=$(get_site_status "$SITE_NAME") if [ "$status" = "running" ]; then log_info "停止运行中的进程..." - stop_site + if ! stop_site; then + log_warning "停止进程失败,继续删除操作" + fi + elif [ "$status" = "not_exists" ]; then + log_warning "网站 $SITE_NAME 不存在,跳过停止操作" + else + log_info "网站已停止,无需停止操作" fi # 删除PM2配置 + log_info "删除PM2配置..." su - "jingrow" -c " export NVM_DIR=\"\$HOME/.nvm\" [ -s \"\$NVM_DIR/nvm.sh\" ] && \. \"\$NVM_DIR/nvm.sh\" pm2 delete '$SITE_NAME' 2>/dev/null || true " + log_success "PM2配置已清理" # 删除traefik配置文件 - remove_traefik_website_config "$SITE_NAME" + log_info "删除Traefik配置文件..." + if remove_traefik_website_config "$SITE_NAME"; then + log_success "Traefik配置文件已删除" + else + log_warning "Traefik配置文件删除失败或不存在" + fi # 删除端口分配记录 + log_info "删除端口分配记录..." local port_file="$JSITE_BASE_DIR/site_port.json" if [ -f "$port_file" ] && command -v jq &> /dev/null; then - jq "del(.$SITE_NAME)" "$port_file" > "${port_file}.tmp" && mv "${port_file}.tmp" "$port_file" - chown "jingrow:jingrow" "$port_file" 2>/dev/null || true + if jq "del(.$SITE_NAME)" "$port_file" > "${port_file}.tmp" 2>/dev/null; then + mv "${port_file}.tmp" "$port_file" + chown "jingrow:jingrow" "$port_file" 2>/dev/null || true + log_success "端口分配记录已删除" + else + log_warning "端口分配记录删除失败" + fi + else + log_warning "端口分配文件不存在或jq命令不可用" fi # 删除项目目录 log_info "删除项目目录: $JSITE_BASE_DIR/$SITE_NAME" - rm -rf "$JSITE_BASE_DIR/$SITE_NAME" + if [ -d "$JSITE_BASE_DIR/$SITE_NAME" ]; then + if rm -rf "$JSITE_BASE_DIR/$SITE_NAME"; then + log_success "项目目录已删除" + else + log_error "删除项目目录失败" + return 1 + fi + else + log_warning "项目目录不存在" + fi # 重启traefik以移除配置 - restart_traefik + log_info "重启Traefik服务..." + if restart_traefik; then + log_success "Traefik服务已重启" + else + log_warning "重启Traefik失败,请手动重启" + fi log_success "网站 $SITE_NAME 已删除" }