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
This commit is contained in:
Takashi Kajinami 2020-06-24 18:40:45 +09:00
parent 2729221477
commit b8f412d81c
2 changed files with 2 additions and 0 deletions

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)])

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