From 45fb7202ac0e606ccb7b4fe95f169424f0a6cabc Mon Sep 17 00:00:00 2001 From: Carl George Date: Mon, 5 Apr 2021 15:01:20 -0500 Subject: 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. --- admin.go | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'admin.go') diff --git a/admin.go b/admin.go index f333657..da7ce0f 100644 --- a/admin.go +++ b/admin.go @@ -39,6 +39,7 @@ import ( "sync" "time" + "github.com/caddyserver/caddy/v2/notify" "github.com/caddyserver/certmagic" "github.com/prometheus/client_golang/prometheus" "go.uber.org/zap" @@ -905,6 +906,11 @@ func handleStop(w http.ResponseWriter, r *http.Request) error { Err: fmt.Errorf("method not allowed"), } } + + if err := notify.NotifyStopping(); err != nil { + Log().Error("unable to notify stopping to service manager", zap.Error(err)) + } + exitProcess(Log().Named("admin.api")) return nil } -- cgit v1.2.3