diff options
| -rw-r--r-- | admin.go | 6 | ||||
| -rw-r--r-- | caddy.go | 11 | ||||
| -rw-r--r-- | cmd/commandfuncs.go | 13 | ||||
| -rw-r--r-- | notify/notify.go (renamed from cmd/notify.go) | 7 | ||||
| -rw-r--r-- | notify/notify_linux.go (renamed from cmd/notify_linux.go) | 18 | ||||
| -rw-r--r-- | notify/notify_other.go (renamed from cmd/notify_other.go) | 6 | 
6 files changed, 43 insertions, 18 deletions
@@ -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  } @@ -32,6 +32,7 @@ import (  	"sync"  	"time" +	"github.com/caddyserver/caddy/v2/notify"  	"github.com/caddyserver/certmagic"  	"github.com/google/uuid"  	"go.uber.org/zap" @@ -100,6 +101,16 @@ func Run(cfg *Config) error {  // if it is different from the current config or  // forceReload is true.  func Load(cfgJSON []byte, forceReload bool) error { +	if err := notify.NotifyReloading(); err != nil { +		Log().Error("unable to notify reloading to service manager", zap.Error(err)) +	} + +	defer func() { +		if err := notify.NotifyReadiness(); err != nil { +			Log().Error("unable to notify readiness to service manager", zap.Error(err)) +		} +	}() +  	return changeConfig(http.MethodPost, "/"+rawConfigKey, cfgJSON, forceReload)  } diff --git a/cmd/commandfuncs.go b/cmd/commandfuncs.go index 77d95b9..d32b9c7 100644 --- a/cmd/commandfuncs.go +++ b/cmd/commandfuncs.go @@ -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 { diff --git a/cmd/notify.go b/notify/notify.go index 21e0e69..bca80c1 100644 --- a/cmd/notify.go +++ b/notify/notify.go @@ -12,7 +12,7 @@  // See the License for the specific language governing permissions and  // limitations under the License. -package caddycmd +package notify  // NotifyReadiness notifies process manager of readiness.  func NotifyReadiness() error { @@ -23,3 +23,8 @@ func NotifyReadiness() error {  func NotifyReloading() error {  	return notifyReloading()  } + +// NotifyStopping notifies process manager of stopping. +func NotifyStopping() error { +	return notifyStopping() +} diff --git a/cmd/notify_linux.go b/notify/notify_linux.go index 924c00f..8ba49d2 100644 --- a/cmd/notify_linux.go +++ b/notify/notify_linux.go @@ -12,7 +12,7 @@  // See the License for the specific language governing permissions and  // limitations under the License. -package caddycmd +package notify  import (  	"io" @@ -42,7 +42,7 @@ func sdNotify(path, payload string) error {  	return nil  } -// notifyReadiness notifies systemd caddy that has finished its +// notifyReadiness notifies systemd that caddy has finished its  // initialization routines.  func notifyReadiness() error {  	val, ok := os.LookupEnv("NOTIFY_SOCKET") @@ -55,7 +55,7 @@ func notifyReadiness() error {  	return nil  } -// notifyReadiness notifies systemd that caddy is reloading its config. +// notifyReloading notifies systemd that caddy is reloading its config.  func notifyReloading() error {  	val, ok := os.LookupEnv("NOTIFY_SOCKET")  	if !ok || val == "" { @@ -66,3 +66,15 @@ func notifyReloading() error {  	}  	return nil  } + +// notifyStopping notifies systemd that caddy is stopping. +func notifyStopping() error { +	val, ok := os.LookupEnv("NOTIFY_SOCKET") +	if !ok || val == "" { +		return nil +	} +	if err := sdNotify(val, "STOPPING=1"); err != nil { +		return err +	} +	return nil +} diff --git a/cmd/notify_other.go b/notify/notify_other.go index 4425ed7..17f62ba 100644 --- a/cmd/notify_other.go +++ b/notify/notify_other.go @@ -14,7 +14,7 @@  // +build !linux -package caddycmd +package notify  func notifyReadiness() error {  	return nil @@ -23,3 +23,7 @@ func notifyReadiness() error {  func notifyReloading() error {  	return nil  } + +func notifyStopping() error { +	return nil +}  | 
