Browse Source

Make sure failed containers get stopped by systemd

When the main PID (i.e., common) of a container is killed because of
some reasons, systemd won't execute ExecStop command.
Current podman doesn't detect this failure ang recognize that container
is still running and this causes failure when systemd tries to restart
the container.

This patch introduces ExecStopPost configuration into systemd unit
files so that stop operation is executed even when a container fails
because of killed main process. The stale container should be cleaned
up by ExecStopPost task before systemd tries to restart it.

Note that the similar change has been introcuded to "podman generate
systemd" command already[1].
[1] e5c3432944

Change-Id: Ie2cb3bb63138b70019f86b88066697e98e333669
Closes-Bug: #1884866
(cherry picked from commit b8f412d81c)
changes/74/742174/1
Takashi Kajinami 1 month ago
parent
commit
6f44509dcb
2 changed files with 2 additions and 0 deletions
  1. +1
    -0
      paunch/tests/test_utils_systemd.py
  2. +1
    -0
      paunch/utils/systemd.py

+ 1
- 0
paunch/tests/test_utils_systemd.py View File

@@ -41,6 +41,7 @@ class TestUtilsSystemd(base.TestCase):
self.assertIn('Wants=something.service', unit)
self.assertIn('Restart=always', unit)
self.assertIn('ExecStop=/usr/bin/podman stop -t 15 my_app', unit)
self.assertIn('ExecStopPost=/usr/bin/podman stop -t 15 my_app', unit)
self.assertIn('PIDFile=/var/run/my_app.pid', unit)
mock_chmod.assert_has_calls([mock.call(sysd_unit_f, 420)])



+ 1
- 0
paunch/utils/systemd.py View File

@@ -101,6 +101,7 @@ Restart=%(restart)s
ExecStart=%(start_cmd)s
ExecReload=/usr/bin/podman kill --signal HUP %(name)s
ExecStop=/usr/bin/podman stop -t %(stop_grace_period)s %(name)s
ExecStopPost=/usr/bin/podman stop -t %(stop_grace_period)s %(name)s
KillMode=none
Type=forking
PIDFile=/var/run/%(name)s.pid


Loading…
Cancel
Save