diff --git a/agent/internal/httpapi/server.go b/agent/internal/httpapi/server.go index 4f0114d..9cdc9ee 100644 --- a/agent/internal/httpapi/server.go +++ b/agent/internal/httpapi/server.go @@ -88,7 +88,7 @@ func New(agentCfg config.AgentConfig, baseDir string, ms *mediaserver.Client, st pc = procctl.New(agentCfg, baseDir) } else { // 使用 systemctl 模式管理 Media Server - pc = procctl.NewSystemCtlController("safesight-edge-server") + pc = procctl.NewSystemCtlController("safesight-edge-server", strings.TrimSpace(agentCfg.ConfigPath)) } execPath, _ := os.Executable() if execPath != "" { diff --git a/agent/internal/procctl/systemctl.go b/agent/internal/procctl/systemctl.go index 772d057..a1c1da1 100644 --- a/agent/internal/procctl/systemctl.go +++ b/agent/internal/procctl/systemctl.go @@ -12,14 +12,15 @@ import ( // SystemCtlController 使用 systemctl 管理 Media Server type SystemCtlController struct { - serviceName string + serviceName string + configPath string } -// NewSystemCtlController 创建 systemctl 控制器 -func NewSystemCtlController(serviceName string) *SystemCtlController { - return &SystemCtlController{ - serviceName: serviceName, - } +func NewSystemCtlController(serviceName string, configPath string) *SystemCtlController { + return &SystemCtlController{ + serviceName: serviceName, + configPath: configPath, + } } func (s *SystemCtlController) Enabled() bool { return s != nil } @@ -49,13 +50,21 @@ func (s *SystemCtlController) Status() (Status, error) { return Status{ Running: true, Pid: pid, - ConfigPath: "/opt/safesight-edge-server/etc/media-server.json", + ConfigPath: s.configPath, }, nil } func (s *SystemCtlController) Version() (string, error) { - // 直接执行 media-server --version - cmd := exec.Command("/opt/safesight-edge-server/bin/safesight-edge-server", "--version") + // 从 systemctl 获取 ExecStart 路径,再调用 --version + binOut, err := exec.Command("systemctl", "show", "--property=ExecStart", "--value", s.serviceName).Output() + if err != nil { + return "", fmt.Errorf("get version failed: %w", err) + } + binPath := strings.Fields(strings.TrimSpace(string(binOut)))[0] + if binPath == "" { + return "", fmt.Errorf("get version failed: empty ExecStart") + } + cmd := exec.Command(binPath, "--version") out, err := cmd.Output() if err != nil { return "", fmt.Errorf("get version failed: %w", err)