From 9b0f0e792a1ea39047f5b529b8b7ccc76c434aee Mon Sep 17 00:00:00 2001 From: Cuong Manh Le Date: Wed, 17 Jul 2024 15:53:55 +0700 Subject: [PATCH] cmd/cli: workaround incorrect status data when not root --- cmd/cli/service.go | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/cmd/cli/service.go b/cmd/cli/service.go index 1de206f..f097cbe 100644 --- a/cmd/cli/service.go +++ b/cmd/cli/service.go @@ -28,6 +28,9 @@ func newService(i service.Interface, c *service.Config) (service.Service, error) return &sysV{s}, nil case s.Platform() == "linux-systemd": return &systemd{s}, nil + case s.Platform() == "darwin-launchd": + return &launchd{s}, nil + } return s, nil } @@ -113,7 +116,7 @@ func (s *procd) Status() (service.Status, error) { return service.StatusRunning, nil } -// procd wraps a service.Service, and provide status command to +// systemd wraps a service.Service, and provide status command to // report the status correctly. type systemd struct { service.Service @@ -127,6 +130,21 @@ func (s *systemd) Status() (service.Status, error) { return s.Service.Status() } +// launchd wraps a service.Service, and provide status command to +// report the status correctly when not running as root on Darwin. +// +// TODO: remove this wrapper once https://github.com/kardianos/service/issues/400 fixed. +type launchd struct { + service.Service +} + +func (l *launchd) Status() (service.Status, error) { + if os.Geteuid() != 0 { + return service.StatusUnknown, errors.New("permission denied") + } + return l.Service.Status() +} + type task struct { f func() error abortOnError bool