Skip to content

Commit

Permalink
Merge pull request #7312 from vrothberg/fix-7294
Browse files Browse the repository at this point in the history
podman.service: use sdnotify
  • Loading branch information
openshift-merge-robot authored Aug 13, 2020
2 parents 9ede14e + 0f4e2be commit 81499a5
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 2 deletions.
3 changes: 2 additions & 1 deletion contrib/systemd/system/podman.service
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,6 @@ Documentation=man:podman-system-service(1)
StartLimitIntervalSec=0

[Service]
Type=simple
Type=notify
KillMode=process
ExecStart=/usr/bin/podman system service
27 changes: 26 additions & 1 deletion pkg/api/server/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package server

import (
"context"
"fmt"
"log"
"net"
"net/http"
Expand All @@ -17,6 +18,7 @@ import (
"github.com/containers/podman/v2/pkg/api/handlers"
"github.com/containers/podman/v2/pkg/api/server/idletracker"
"github.com/coreos/go-systemd/v22/activation"
"github.com/coreos/go-systemd/v22/daemon"
"github.com/gorilla/mux"
"github.com/gorilla/schema"
"github.com/pkg/errors"
Expand Down Expand Up @@ -147,8 +149,31 @@ func newServer(runtime *libpod.Runtime, duration time.Duration, listener *net.Li
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 {
setupSystemd()
sigChan := make(chan os.Signal, 1)
signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM)
errChan := make(chan error, 1)
Expand Down

0 comments on commit 81499a5

Please sign in to comment.