notify: Send all sd_notify signals from main caddy process (#4060)

Initial sd_notify support was added in #3963, but that sent signals from
both cmdRun and cmdReload.  This approach has two drawbacks:

- Reloads initiated via the API do not send signals.
- The signals are sent from different processes, which requires the
  `NotifyAccess=exec` directive in the unit file.

This change moves the NotifyReloading and NotifyReadiness invocations to
Load, which address both of those drawbacks.  It also adds a
complimentary NotifyStopping method which is invoked from handleStop.
All the notify methods are defined in a notify package to avoid an
import loop.
This commit is contained in:
Carl George
2021-04-05 15:01:20 -05:00
committed by GitHub
parent 66783eb4d9
commit 45fb7202ac
6 changed files with 43 additions and 18 deletions
-13
View File
@@ -269,10 +269,6 @@ func cmdRun(fl Flags) (int, error) {
}
}
if err := NotifyReadiness(); err != nil {
caddy.Log().Error("unable to notify readiness to service manager", zap.Error(err))
}
select {}
}
@@ -294,15 +290,6 @@ func cmdReload(fl Flags) (int, error) {
reloadCmdAddrFlag := fl.String("address")
reloadCmdForceFlag := fl.Bool("force")
if err := NotifyReloading(); err != nil {
caddy.Log().Error("unable to notify reloading to service manager", zap.Error(err))
}
defer func() {
if err := NotifyReadiness(); err != nil {
caddy.Log().Error("unable to notify readiness to service manager", zap.Error(err))
}
}()
// get the config in caddy's native format
config, configFile, err := loadConfig(reloadCmdConfigFlag, reloadCmdConfigAdapterFlag)
if err != nil {