service: update API to allow for programs that install their own signal handlers.

This commit is contained in:
Daniel Theophanes
2016-02-05 09:48:50 -08:00
parent 2954cfdd7b
commit 5f98fcd9ec
5 changed files with 44 additions and 24 deletions
+8 -5
View File
@@ -80,9 +80,11 @@ func (s *systemd) Install() error {
var to = &struct {
*Config
Path string
ReloadSignal string
}{
s.Config,
path,
s.Option.string(optionReloadSignal, ""),
}
err = s.template().Execute(f, to)
@@ -128,11 +130,11 @@ func (s *systemd) Run() (err error) {
return err
}
sigChan := make(chan os.Signal, 3)
signal.Notify(sigChan, syscall.SIGTERM, os.Interrupt)
<-sigChan
s.Option.funcSingle(optionRunWait, func() {
var sigChan = make(chan os.Signal, 3)
signal.Notify(sigChan, syscall.SIGTERM, os.Interrupt)
<-sigChan
})()
return s.i.Stop(s)
}
@@ -160,6 +162,7 @@ ExecStart={{.Path|cmdEscape}}{{range .Arguments}} {{.|cmd}}{{end}}
{{if .ChRoot}}RootDirectory={{.ChRoot|cmd}}{{end}}
{{if .WorkingDirectory}}WorkingDirectory={{.WorkingDirectory|cmd}}{{end}}
{{if .UserName}}User={{.UserName}}{{end}}
{{if .ReloadSignal}}ExecReload=/bin/kill -{{.ReloadSignal}} "$MAINPID"{{end}}
Restart=always
RestartSec=120