
無条件終了時にスクリプトsystemd
を再起動する単純なサービス ユニットがサービス定義に定義されています。スクリプトが何らかの理由でハングした場合でも、ユニット ファイルで変数を有効にすることでスクリプトを再起動できることを絶対に確認したいだけです。python
Restart=always
WatchdogSec=
私の問題は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)