systemdウォッチドッグサポートを使用してアプリケーションを再起動する

systemdウォッチドッグサポートを使用してアプリケーションを再起動する

無条件終了時にスクリプトsystemdを再起動する単純なサービス ユニットがサービス定義に定義されています。スクリプトが何らかの理由でハングした場合でも、ユニット ファイルで変数を有効にすることでスクリプトを再起動できることを絶対に確認したいだけです。pythonRestart=alwaysWatchdogSec=

私の問題はsystemd のジャーナルの公式ドキュメント明確に説明していません。

同じページから引用すると、

WatchdogSec=

サービスのウォッチドッグ タイムアウトを設定します。起動が完了するとウォッチドッグがアクティブになります。サービスはsd_notify(3)定期的に呼び出す必要があります"WATCHDOG=1"(つまり、「キープアライブ ping」)。

不明なのは、サービスウォッチドッグ サービスを使用して ping を維持するか、実行中のアプリケーション (私の場合は Python スクリプト) が、前述の環境変数を更新して ping を維持する必要があります。

私のシンプルなサービス定義

[Unit]
Description=dev-Status: Computes RF device availability status
           
[Service]
Type=simple

EnvironmentFile=/etc/sysconfig/db_EndPoint
ExecStart=/usr/bin/python /opt/foobar/foobar.py
RestartSec=10
Restart=always
         
[Install]
WantedBy=default.target

このサービス ファイルに以下の行を追加するだけで、スクリプトは自動的に再起動されますか?

WatchdogSec=30s

答え1

ウォッチドッグを「パット」またはpingするには、Pythonを使用できます。システム通知を送信するパッケージ:

from systemd.daemon import notify, Notification
notify(Notification.WATCHDOG)

関連情報