核心功能设计已完成,包含frpc热重启冷重启两种设计逻辑
This commit is contained in:
@@ -4,6 +4,7 @@ import (
|
||||
"bytes"
|
||||
"embed"
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"os/exec"
|
||||
"runtime"
|
||||
@@ -182,6 +183,7 @@ func StartFrpc() error {
|
||||
}
|
||||
|
||||
// ReloadFrpc 热加载 frpc 配置(仅发信号,不重复写入二进制)
|
||||
// ReloadFrpc 热加载 frpc 配置,失败时自动降级为重启
|
||||
func ReloadFrpc() error {
|
||||
running, err := GetFrpcStatus()
|
||||
if err != nil {
|
||||
@@ -191,7 +193,6 @@ func ReloadFrpc() error {
|
||||
return StartFrpc()
|
||||
}
|
||||
|
||||
// 确保缓存路径存在
|
||||
if cachedFrpcPath == "" {
|
||||
if _, err := getFrpcPath(); err != nil {
|
||||
return fmt.Errorf("获取 frpc 路径失败: %w", err)
|
||||
@@ -199,9 +200,16 @@ func ReloadFrpc() error {
|
||||
}
|
||||
|
||||
cmd := exec.Command(cachedFrpcPath, "reload", "-c", "./frpc.toml")
|
||||
output, err := cmd.CombinedOutput()
|
||||
_, err = cmd.CombinedOutput() // ← 这里改了
|
||||
if err != nil {
|
||||
return fmt.Errorf("reload 失败: %s, %w", string(output), err)
|
||||
log.Printf("⚠️ 热加载失败 (%v),自动降级为重启 frpc", err)
|
||||
if stopErr := StopFrpc(); stopErr != nil {
|
||||
return fmt.Errorf("停止 frpc 失败: %w", stopErr)
|
||||
}
|
||||
if startErr := StartFrpc(); startErr != nil {
|
||||
return fmt.Errorf("启动 frpc 失败: %w", startErr)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user