From d324040adc1650bdc879bae817f3082fc36b511f Mon Sep 17 00:00:00 2001 From: Guilhem Lettron Date: Tue, 8 Nov 2016 12:25:56 +0100 Subject: [PATCH] Add systemd watchdog feature --- contrib/systemd/traefik.service | 3 ++- glide.yaml | 2 +- traefik.go | 22 +++++++++++++++++++++- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/contrib/systemd/traefik.service b/contrib/systemd/traefik.service index c93f8e27d..37ba9102a 100644 --- a/contrib/systemd/traefik.service +++ b/contrib/systemd/traefik.service @@ -4,7 +4,8 @@ Description=Traefik [Service] Type=notify ExecStart=/usr/bin/traefik --configFile=/etc/traefik.toml -Restart=on-failure +Restart=always +WatchdogSec=1s [Install] WantedBy=multi-user.target diff --git a/glide.yaml b/glide.yaml index d72ce1f8e..f2fd92663 100644 --- a/glide.yaml +++ b/glide.yaml @@ -108,7 +108,7 @@ import: - package: github.com/mitchellh/mapstructure version: f3009df150dadf309fdee4a54ed65c124afad715 - package: github.com/coreos/go-systemd - version: v12 + version: v14 subpackages: - daemon - package: github.com/google/go-github diff --git a/traefik.go b/traefik.go index 12eeb8fa7..8441cdce4 100644 --- a/traefik.go +++ b/traefik.go @@ -244,10 +244,30 @@ func run(traefikConfiguration *TraefikConfiguration) { server := NewServer(globalConfiguration) server.Start() defer server.Close() - sent, err := daemon.SdNotify("READY=1") + sent, err := daemon.SdNotify(true, "READY=1") if !sent && err != nil { log.Error("Fail to notify", err) } + t, err := daemon.SdWatchdogEnabled(true) + if err != nil { + log.Error("Problem with watchdog", err) + } else if t != 0 { + // Send a ping each half time given + t = t / 2 + go func(interval time.Duration) { + tick := time.Tick(interval) + for range tick { + if server.globalConfiguration.Web != nil { + if _, err := http.Head("http://" + server.globalConfiguration.Web.Address + "/ping"); err == nil { + daemon.SdNotify(true, "WATCHDOG=1") + } + } else { + daemon.SdNotify(true, "WATCHDOG=1") + } + } + }(t) + } + log.Info(t.String()) server.Wait() log.Info("Shutting down") }