Служба перезапуска systemd на сторожевом таймере завершает предыдущий зависший экземпляр

Я пытаюсь настроить конфигурацию службы systemd для перезапуска службы при сбое сторожевого таймера. Если мое приложение не вызывает sd_notify() вовремя, systemd создает новый экземпляр. Однако предыдущий экземпляр не уничтожается. Через некоторое время у меня запущено много экземпляров моего приложения.

$ systemctl status my-daemon.service

  Loaded: loaded (/lib/systemd/system/my-daemon.service; disabled)
  Active: active (running) since Tue, 26 Aug 2014 10:27:46 +0000; 7s ago
Main PID: 1433 (attendance-syst)
  CGroup: name=systemd:/system/my-daemon.service
      ├ 1281 /usr/local/bin/my-daemon
      ├ 1384 /usr/local/bin/my-daemon
      ├ 1407 /usr/local/bin/my-daemon
      └ 1433 /usr/local/bin/my-daemon
      ...

Это часть моего служебного файла:

[Service]
ExecStart=/usr/local/bin/my-daemon
TimeoutStopSec=5
WatchdogSec=10
Restart=on-failure

Как я могу настроить systemd для уничтожения экземпляров, которые не работают в сторожевом таймере?

Я уже прочитал страницу руководства, но это мне не помогло .

Я думал, что Restart=on-failure по умолчанию перезапустит зависший процесс...


person dorny    schedule 26.08.2014    source источник


Ответы (1)


Это ошибка, и она уже исправлена ​​в новых версиях systemd.

  • В systemd 208 (доступно для debian jessie) работает корректно.

  • В systemd 204 (доступно для debian wheezy через backports) он все еще не работает.

Точного релиза, где это исправили, я не нашел.

person dorny    schedule 02.09.2014