diff --git a/pkg/systemd/util.go b/pkg/systemd/util.go index 95300d59c..1bec94baf 100644 --- a/pkg/systemd/util.go +++ b/pkg/systemd/util.go @@ -32,16 +32,27 @@ package systemd -import "os" +import ( + "os" + "sync" +) + +var ( + runningSystemd bool + detectSystemd sync.Once +) // IsRunningSystemd checks whether the host was booted with systemd as its init // system. This functions similarly to systemd's `sd_booted(3)`: internally, it // checks whether /run/systemd/system/ exists and is a directory. // https://github.com/coreos/go-systemd/blob/d843340ab4bd3815fda02e648f9b09ae2dc722a7/util/util.go#L68-L78 func IsRunningSystemd() bool { - fi, err := os.Lstat("/run/systemd/system") - if err != nil { - return false - } - return fi.IsDir() + detectSystemd.Do(func() { + fi, err := os.Lstat("/run/systemd/system") + if err != nil { + return + } + runningSystemd = fi.IsDir() + }) + return runningSystemd }