diff --git a/service_darwin.go b/service_darwin.go index 237d790..574bc67 100644 --- a/service_darwin.go +++ b/service_darwin.go @@ -27,12 +27,15 @@ type darwinSystem struct{} func (darwinSystem) String() string { return version } + func (darwinSystem) Detect() bool { return true } + func (darwinSystem) Interactive() bool { return interactive } + func (darwinSystem) New(i Interface, c *Config) (Service, error) { s := &darwinLaunchdService{ i: i, @@ -106,6 +109,18 @@ func (s *darwinLaunchdService) getServiceFilePath() (string, error) { return "/Library/LaunchDaemons/" + s.Name + ".plist", nil } +func (s *darwinLaunchdService) getLogPath(logType string) (string, error) { + if s.userService { + homeDir, err := s.getHomeDir() + if err != nil { + return "", err + } + + return fmt.Sprintf("%s/.%s.%s.log", homeDir, s.Name, logType), nil + } + return fmt.Sprintf("%s/%s.%s.log", "/var/log", s.Name, logType), nil +} + func (s *darwinLaunchdService) template() *template.Template { functions := template.FuncMap{ "bool": func(v bool) string { @@ -154,20 +169,25 @@ func (s *darwinLaunchdService) Install() error { return err } + stdOutPath, _ := s.getLogPath("out") + stdErrPath, _ := s.getLogPath("err") + var to = &struct { *Config Path string KeepAlive, RunAtLoad bool SessionCreate bool - StandardOut bool - StandardError bool + StandardOutPath string + StandardErrorPath string }{ - Config: s.Config, - Path: path, - KeepAlive: s.Option.bool(optionKeepAlive, optionKeepAliveDefault), - RunAtLoad: s.Option.bool(optionRunAtLoad, optionRunAtLoadDefault), - SessionCreate: s.Option.bool(optionSessionCreate, optionSessionCreateDefault), + Config: s.Config, + Path: path, + KeepAlive: s.Option.bool(optionKeepAlive, optionKeepAliveDefault), + RunAtLoad: s.Option.bool(optionRunAtLoad, optionRunAtLoadDefault), + SessionCreate: s.Option.bool(optionSessionCreate, optionSessionCreateDefault), + StandardOutPath: stdOutPath, + StandardErrorPath: stdErrPath, } return s.template().Execute(f, to) @@ -216,6 +236,7 @@ func (s *darwinLaunchdService) Start() error { } return run("launchctl", "load", confPath) } + func (s *darwinLaunchdService) Stop() error { confPath, err := s.getServiceFilePath() if err != nil { @@ -223,6 +244,7 @@ func (s *darwinLaunchdService) Stop() error { } return run("launchctl", "unload", confPath) } + func (s *darwinLaunchdService) Restart() error { err := s.Stop() if err != nil { @@ -233,9 +255,7 @@ func (s *darwinLaunchdService) Restart() error { } func (s *darwinLaunchdService) Run() error { - var err error - - err = s.i.Start(s) + err := s.i.Start(s) if err != nil { return err } @@ -255,6 +275,7 @@ func (s *darwinLaunchdService) Logger(errs chan<- error) (Logger, error) { } return s.SystemLogger(errs) } + func (s *darwinLaunchdService) SystemLogger(errs chan<- error) (Logger, error) { return newSysLogger(s.Name, errs) } @@ -287,12 +308,11 @@ var launchdConfig = ` <{{bool .RunAtLoad}}/> Disabled - - StandardOutPath - /usr/local/var/log/{{html .Name}}.out.log - StandardErrorPath - /usr/local/var/log/{{html .Name}}.err.log - + + {{if .StandardOutPath}}StandardOutPath + {{html .StandardOutPath}}{{end}} + {{if .StandardErrorPath}}StandardErrorPath + {{html .StandardErrorPath}}{{end}} `