Fix systemd watchdog feature

Commit coreos/go-systemd@0c088e introduce cleaning environment.
First usage of sdnotify (for type=notify) was clearing NOTIFY_SOCKET environment variable.
sdnotify in watchdog was unable to ping back.

Fix #1353
This commit is contained in:
Guilhem Lettron 2017-05-02 13:29:56 +02:00 committed by Fernandez Ludovic
parent b67a27d0c7
commit 3c33eab35e

View file

@ -244,22 +244,25 @@ func run(traefikConfiguration *server.TraefikConfiguration) {
svr := server.NewServer(globalConfiguration) svr := server.NewServer(globalConfiguration)
svr.Start() svr.Start()
defer svr.Close() defer svr.Close()
sent, err := daemon.SdNotify(true, "READY=1") sent, err := daemon.SdNotify(false, "READY=1")
if !sent && err != nil { if !sent && err != nil {
log.Error("Fail to notify", err) log.Error("Fail to notify", err)
} }
t, err := daemon.SdWatchdogEnabled(true) t, err := daemon.SdWatchdogEnabled(false)
if err != nil { if err != nil {
log.Error("Problem with watchdog", err) log.Error("Problem with watchdog", err)
} else if t != 0 { } else if t != 0 {
// Send a ping each half time given // Send a ping each half time given
t = t / 2 t = t / 2
go func(interval time.Duration) { log.Info("Watchdog activated with timer each ", t)
tick := time.Tick(interval) safe.Go(func() {
tick := time.Tick(t)
for range tick { for range tick {
daemon.SdNotify(true, "WATCHDOG=1") if ok, _ := daemon.SdNotify(false, "WATCHDOG=1"); !ok {
log.Error("Fail to tick watchdog")
}
} }
}(t) })
} }
svr.Wait() svr.Wait()
log.Info("Shutting down") log.Info("Shutting down")