Merge pull request #7312 from vrothberg/fix-7294

podman.service: use sdnotify
This commit is contained in:
OpenShift Merge Robot
2020-08-13 23:00:33 +02:00
committed by GitHub
2 changed files with 28 additions and 2 deletions

View File

@ -6,5 +6,6 @@ Documentation=man:podman-system-service(1)
StartLimitIntervalSec=0 StartLimitIntervalSec=0
[Service] [Service]
Type=simple Type=notify
KillMode=process
ExecStart=/usr/bin/podman system service ExecStart=/usr/bin/podman system service

View File

@ -2,6 +2,7 @@ package server
import ( import (
"context" "context"
"fmt"
"log" "log"
"net" "net"
"net/http" "net/http"
@ -17,6 +18,7 @@ import (
"github.com/containers/podman/v2/pkg/api/handlers" "github.com/containers/podman/v2/pkg/api/handlers"
"github.com/containers/podman/v2/pkg/api/server/idletracker" "github.com/containers/podman/v2/pkg/api/server/idletracker"
"github.com/coreos/go-systemd/v22/activation" "github.com/coreos/go-systemd/v22/activation"
"github.com/coreos/go-systemd/v22/daemon"
"github.com/gorilla/mux" "github.com/gorilla/mux"
"github.com/gorilla/schema" "github.com/gorilla/schema"
"github.com/pkg/errors" "github.com/pkg/errors"
@ -147,8 +149,31 @@ func newServer(runtime *libpod.Runtime, duration time.Duration, listener *net.Li
return &server, nil return &server, nil
} }
// Serve starts responding to HTTP requests // If the NOTIFY_SOCKET is set, communicate the PID and readiness, and
// further unset NOTIFY_SOCKET to prevent containers from sending
// messages and unset INVOCATION_ID so conmon and containers are in
// the correct cgroup.
func setupSystemd() {
if len(os.Getenv("NOTIFY_SOCKET")) == 0 {
return
}
payload := fmt.Sprintf("MAINPID=%d", os.Getpid())
payload += "\n"
payload += daemon.SdNotifyReady
if sent, err := daemon.SdNotify(true, payload); err != nil {
logrus.Errorf("Error notifying systemd of Conmon PID: %s", err.Error())
} else if sent {
logrus.Debugf("Notify sent successfully")
}
if err := os.Unsetenv("INVOCATION_ID"); err != nil {
logrus.Errorf("Error unsetting INVOCATION_ID: %s", err.Error())
}
}
// Serve starts responding to HTTP requests.
func (s *APIServer) Serve() error { func (s *APIServer) Serve() error {
setupSystemd()
sigChan := make(chan os.Signal, 1) sigChan := make(chan os.Signal, 1)
signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM) signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM)
errChan := make(chan error, 1) errChan := make(chan error, 1)