mirror of https://github.com/slackhq/nebula.git
Attempt to notify systemd of service readiness on linux (#929)
This commit is contained in:
parent
f5db03c834
commit
1e3c155896
|
@ -65,6 +65,7 @@ func main() {
|
||||||
|
|
||||||
if !*configTest {
|
if !*configTest {
|
||||||
ctrl.Start()
|
ctrl.Start()
|
||||||
|
notifyReady(l)
|
||||||
ctrl.ShutdownBlock()
|
ctrl.ShutdownBlock()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net"
|
||||||
|
"os"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/sirupsen/logrus"
|
||||||
|
)
|
||||||
|
|
||||||
|
// SdNotifyReady tells systemd the service is ready and dependent services can now be started
|
||||||
|
// https://www.freedesktop.org/software/systemd/man/sd_notify.html
|
||||||
|
// https://www.freedesktop.org/software/systemd/man/systemd.service.html
|
||||||
|
const SdNotifyReady = "READY=1"
|
||||||
|
|
||||||
|
func notifyReady(l *logrus.Logger) {
|
||||||
|
sockName := os.Getenv("NOTIFY_SOCKET")
|
||||||
|
if sockName == "" {
|
||||||
|
l.Debugln("NOTIFY_SOCKET systemd env var not set, not sending ready signal")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
conn, err := net.DialTimeout("unixgram", sockName, time.Second)
|
||||||
|
if err != nil {
|
||||||
|
l.WithError(err).Error("failed to connect to systemd notification socket")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer conn.Close()
|
||||||
|
|
||||||
|
err = conn.SetWriteDeadline(time.Now().Add(time.Second))
|
||||||
|
if err != nil {
|
||||||
|
l.WithError(err).Error("failed to set the write deadline for the systemd notification socket")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, err = conn.Write([]byte(SdNotifyReady)); err != nil {
|
||||||
|
l.WithError(err).Error("failed to signal the systemd notification socket")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
l.Debugln("notified systemd the service is ready")
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
//go:build !linux
|
||||||
|
// +build !linux
|
||||||
|
|
||||||
|
package main
|
||||||
|
|
||||||
|
import "github.com/sirupsen/logrus"
|
||||||
|
|
||||||
|
func notifyReady(_ *logrus.Logger) {
|
||||||
|
// No init service to notify
|
||||||
|
}
|
|
@ -4,6 +4,8 @@ Wants=basic.target network-online.target nss-lookup.target time-sync.target
|
||||||
After=basic.target network.target network-online.target
|
After=basic.target network.target network-online.target
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
|
Type=notify
|
||||||
|
NotifyAccess=main
|
||||||
SyslogIdentifier=nebula
|
SyslogIdentifier=nebula
|
||||||
ExecReload=/bin/kill -HUP $MAINPID
|
ExecReload=/bin/kill -HUP $MAINPID
|
||||||
ExecStart=/usr/bin/nebula -config /etc/nebula/config.yml
|
ExecStart=/usr/bin/nebula -config /etc/nebula/config.yml
|
||||||
|
|
|
@ -5,6 +5,8 @@ After=basic.target network.target network-online.target
|
||||||
Before=sshd.service
|
Before=sshd.service
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
|
Type=notify
|
||||||
|
NotifyAccess=main
|
||||||
SyslogIdentifier=nebula
|
SyslogIdentifier=nebula
|
||||||
ExecReload=/bin/kill -HUP $MAINPID
|
ExecReload=/bin/kill -HUP $MAINPID
|
||||||
ExecStart=/usr/bin/nebula -config /etc/nebula/config.yml
|
ExecStart=/usr/bin/nebula -config /etc/nebula/config.yml
|
||||||
|
|
|
@ -5,6 +5,8 @@ After=basic.target network.target network-online.target
|
||||||
Before=sshd.service
|
Before=sshd.service
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
|
Type=notify
|
||||||
|
NotifyAccess=main
|
||||||
SyslogIdentifier=nebula
|
SyslogIdentifier=nebula
|
||||||
ExecReload=/bin/kill -HUP $MAINPID
|
ExecReload=/bin/kill -HUP $MAINPID
|
||||||
ExecStart=/usr/local/bin/nebula -config /etc/nebula/config.yml
|
ExecStart=/usr/local/bin/nebula -config /etc/nebula/config.yml
|
||||||
|
|
Loading…
Reference in New Issue