#!/usr/bin/env bash set -euo pipefail # 恢复并启动 frp 服务 # 该脚本自动检测已安装的 frp 服务 (客户端/服务端) 并恢复其运行和开机自启 # 用法:curl -fsSL "https://pan.shumengya.top/d/scripts/frp/start_frp.sh" | sudo bash SERVICE_FRPC="smy-frpc" SERVICE_FRPS="smy-frps" log() { printf '[frp-启动] %s\n' "$*" >&2; } fail() { log "错误: $*" >&2; exit 1; } # 检查 root 权限 if [ "${EUID:-$(id -u)}" -ne 0 ]; then fail "请使用 root 权限运行" fi start_service() { local svc=$1 local service_file="/etc/systemd/system/${svc}.service" if [ -f "$service_file" ]; then log "检测到已安装服务: $svc" # 重置失败状态 systemctl reset-failed "$svc" 2>/dev/null || true log "正在启用并启动 $svc..." systemctl enable --now "$svc" sleep 1 if systemctl is-active --quiet "$svc"; then log "✔ $svc 启动成功 (状态: $(systemctl is-active "$svc"))" else log "✘ $svc 启动失败" systemctl status "$svc" --no-pager -n 5 || true fi else # 仅在调试时显示,避免干扰普通用户 # log "未检测到 $svc,跳过" : fi } log "正在扫描并恢复 frp 服务..." found_any=false if [ -f "/etc/systemd/system/${SERVICE_FRPC}.service" ]; then start_service "$SERVICE_FRPC" found_any=true fi if [ -f "/etc/systemd/system/${SERVICE_FRPS}.service" ]; then start_service "$SERVICE_FRPS" found_any=true fi if [ "$found_any" = false ]; then log "未检测到任何已安装的 frp 服务 (smy-frpc 或 smy-frps)。" log "请先运行安装脚本进行安装。" exit 1 fi log "操作完成。"