修复创建jsite后site_port.json文件格式错误问题及执行删除jiste后需要脚本里面命令需要交互的问题

This commit is contained in:
jingrow 2025-08-10 22:35:08 +08:00
parent 18fba94d4b
commit 895aee053e

View File

@ -546,13 +546,20 @@ save_port_assignment() {
echo "{\"$site_name\": $port}" > "$port_file" echo "{\"$site_name\": $port}" > "$port_file"
fi fi
else else
# 如果没有jq使用简单的文本处理 # 如果没有jq使用更安全的文本处理方式
if [ -f "$port_file" ]; then if [ -f "$port_file" ]; then
# 移除已存在的条目(如果存在) # 提取现有条目并重新构建
grep -v "\"$site_name\"" "$port_file" > "${port_file}.tmp" 2>/dev/null || true local existing_entries=$(grep -o '"[^"]*"[[:space:]]*:[[:space:]]*[0-9]*' "$port_file" 2>/dev/null | grep -v "\"$site_name\"" || echo "")
mv "${port_file}.tmp" "$port_file"
# 在最后一个大括号前添加新条目 # 重新构建JSON文件
sed -i "s/}$/ \"$site_name\": $port\n}/" "$port_file" 2>/dev/null || echo "{\"$site_name\": $port}" > "$port_file" 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 else
# 创建新文件 # 创建新文件
echo "{\"$site_name\": $port}" > "$port_file" echo "{\"$site_name\": $port}" > "$port_file"
@ -1430,44 +1437,73 @@ create_site() {
# 删除网站 # 删除网站
delete_site() { delete_site() {
log_info "即将删除网站: $SITE_NAME" log_info "开始删除网站: $SITE_NAME"
read -p "确认删除?(y/N): " confirm
if [ "$confirm" != "y" ] && [ "$confirm" != "Y" ]; then
log_info "取消删除操作"
return 0
fi
# 停止PM2进程 # 停止PM2进程
local status=$(get_site_status "$SITE_NAME") local status=$(get_site_status "$SITE_NAME")
if [ "$status" = "running" ]; then if [ "$status" = "running" ]; then
log_info "停止运行中的进程..." log_info "停止运行中的进程..."
stop_site if ! stop_site; then
log_warning "停止进程失败,继续删除操作"
fi
elif [ "$status" = "not_exists" ]; then
log_warning "网站 $SITE_NAME 不存在,跳过停止操作"
else
log_info "网站已停止,无需停止操作"
fi fi
# 删除PM2配置 # 删除PM2配置
log_info "删除PM2配置..."
su - "jingrow" -c " su - "jingrow" -c "
export NVM_DIR=\"\$HOME/.nvm\" export NVM_DIR=\"\$HOME/.nvm\"
[ -s \"\$NVM_DIR/nvm.sh\" ] && \. \"\$NVM_DIR/nvm.sh\" [ -s \"\$NVM_DIR/nvm.sh\" ] && \. \"\$NVM_DIR/nvm.sh\"
pm2 delete '$SITE_NAME' 2>/dev/null || true pm2 delete '$SITE_NAME' 2>/dev/null || true
" "
log_success "PM2配置已清理"
# 删除traefik配置文件 # 删除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" local port_file="$JSITE_BASE_DIR/site_port.json"
if [ -f "$port_file" ] && command -v jq &> /dev/null; then 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" if jq "del(.$SITE_NAME)" "$port_file" > "${port_file}.tmp" 2>/dev/null; then
chown "jingrow:jingrow" "$port_file" 2>/dev/null || true 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 fi
# 删除项目目录 # 删除项目目录
log_info "删除项目目录: $JSITE_BASE_DIR/$SITE_NAME" 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以移除配置 # 重启traefik以移除配置
restart_traefik log_info "重启Traefik服务..."
if restart_traefik; then
log_success "Traefik服务已重启"
else
log_warning "重启Traefik失败请手动重启"
fi
log_success "网站 $SITE_NAME 已删除" log_success "网站 $SITE_NAME 已删除"
} }