1

ウォッチドッグの失敗時にサービスを再起動するように 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デフォルトでハングしたプロセスを再起動すると思いました...

4

1 に答える 1

3

これはバグであり、systemd の新しいバージョンでは既に修正されています。

  • systemd 208 (debian jessie で利用可能) では正しく動作します。

  • systemd 204 (バックポート経由で debian wheezy で利用可能) では、まだ壊れています。

彼らがそれを修正した正確なリリースは見つかりませんでした。

于 2014-09-02T07:41:45.580 に答える