From f979f9503e26d2de3ed553c2ce67f60bed6acccc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E7=A5=A5=E8=B6=85?= Date: Thu, 15 Sep 2022 11:45:29 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=9C=8D=E5=8A=A1=E5=AE=89?= =?UTF-8?q?=E8=A3=85=E7=9B=B8=E5=85=B3=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/nodes/system_services.go | 6 +++--- internal/utils/service_linux.go | 28 ++++++++++++++++++---------- 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/internal/nodes/system_services.go b/internal/nodes/system_services.go index ce8e457..26c5450 100644 --- a/internal/nodes/system_services.go +++ b/internal/nodes/system_services.go @@ -85,7 +85,7 @@ func (this *SystemServiceManager) setupSystemd(params maps.Map) error { if len(systemctl) == 0 { return errors.New("can not find 'systemctl' on the system") } - shortName := teaconst.SystemdServiceName + var shortName = teaconst.SystemdServiceName var cmd = executils.NewTimeoutCmd(10*time.Second, systemctl, "is-enabled", shortName) cmd.WithStdout() err = cmd.Run() @@ -111,13 +111,13 @@ func (this *SystemServiceManager) setupSystemd(params maps.Map) error { return nil } } - manager := utils.NewServiceManager(shortName, teaconst.ProductName) + var manager = utils.NewServiceManager(shortName, teaconst.ProductName) err = manager.Install(exe, []string{}) if err != nil { return err } } else { - manager := utils.NewServiceManager(shortName, teaconst.ProductName) + var manager = utils.NewServiceManager(shortName, teaconst.ProductName) err = manager.Uninstall() if err != nil { return err diff --git a/internal/utils/service_linux.go b/internal/utils/service_linux.go index 28bd541..ff7885d 100644 --- a/internal/utils/service_linux.go +++ b/internal/utils/service_linux.go @@ -1,3 +1,4 @@ +//go:build linux // +build linux package utils @@ -5,17 +6,19 @@ package utils import ( "errors" teaconst "github.com/TeaOSLab/EdgeNode/internal/const" + executils "github.com/TeaOSLab/EdgeNode/internal/utils/exec" "github.com/iwind/TeaGo/Tea" "github.com/iwind/TeaGo/files" "os" "os/exec" "regexp" + "time" ) var systemdServiceFile = "/etc/systemd/system/edge-node.service" var initServiceFile = "/etc/init.d/" + teaconst.SystemdServiceName -// 安装服务 +// Install 安装服务 func (this *ServiceManager) Install(exePath string, args []string) error { if os.Getgid() != 0 { return errors.New("only root users can install the service") @@ -29,7 +32,7 @@ func (this *ServiceManager) Install(exePath string, args []string) error { return this.installSystemdService(systemd, exePath, args) } -// 启动服务 +// Start 启动服务 func (this *ServiceManager) Start() error { if os.Getgid() != 0 { return errors.New("only root users can start the service") @@ -46,7 +49,7 @@ func (this *ServiceManager) Start() error { return exec.Command("service", teaconst.ProcessName, "start").Start() } -// 删除服务 +// Uninstall 删除服务 func (this *ServiceManager) Uninstall() error { if os.Getgid() != 0 { return errors.New("only root users can uninstall the service") @@ -108,10 +111,10 @@ func (this *ServiceManager) installInitService(exePath string, args []string) er // install systemd service func (this *ServiceManager) installSystemdService(systemd, exePath string, args []string) error { - shortName := teaconst.SystemdServiceName - longName := "GoEdge Node" // TODO 将来可以修改 + var shortName = teaconst.SystemdServiceName + var longName = "GoEdge Node" // TODO 将来可以修改 - desc := `# Provides: ` + shortName + ` + var desc = `# Provides: ` + shortName + ` # Required-Start: $all # Required-Stop: # Default-Start: 2 3 4 5 @@ -142,12 +145,17 @@ WantedBy=multi-user.target` } // stop current systemd service if running - exec.Command(systemd, "stop", shortName+".service") + executils.NewTimeoutCmd(30*time.Second, systemd, "stop", shortName+".service") // reload - exec.Command(systemd, "daemon-reload") + executils.NewTimeoutCmd(30*time.Second, systemd, "daemon-reload") // enable - cmd := exec.Command(systemd, "enable", shortName+".service") - return cmd.Run() + var cmd = executils.NewTimeoutCmd(30*time.Second, systemd, "enable", shortName+".service") + cmd.WithStderr() + err = cmd.Run() + if err != nil { + return errors.New(err.Error() + ": " + cmd.Stderr()) + } + return nil }