refactor: remove hardcoded paths from systemctl controller, use agent config

This commit is contained in:
tian 2026-07-21 09:42:59 +08:00
parent a798965259
commit 4b7ca5fa82
2 changed files with 19 additions and 10 deletions

View File

@ -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 != "" {

View File

@ -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)