Systemdサービスがクラッシュまたはハングしたときにネットワークメッセージを送信する必要があります(つまり、失敗した状態になります。WatchdogSec=を使用してハングを監視します)。新しいsystemdにFailureAction =があることに気付きましたが、これは任意のコマンドを許可せず、再起動/シャットダウンのみを許可することを確認しました。
具体的には、systemdがプログラムのクラッシュを検出したときに1つのネットワークメッセージを送信し、ハングしたことを検出したときに別のネットワークメッセージを送信する方法が必要です。
「ログを解析する」よりも良い答えを期待しており、ほぼ瞬時の応答時間が必要なので、ポーリングアプローチは適切ではないと思います。イベントの発生によってトリガーされるものでなければなりません。
systemdユニットは、ユニットが故障したときにユニット(またはそれ以上)をアクティブにするOnFailureをサポートしています。あなたはのようなものを置くことができます
OnFailure=notify-failed@%n
次に、必要な 指定子 (おそらく少なくとも%iが必要です)を使用して通知を送信するスクリプトまたはコマンドを起動できる[email protected]
サービスを作成します。
http://northernlightlabs.se/systemd.status.mail.on.unit.failure で実際的な例を見ることができます
通知するちょうど私の方法:
/etc/systemd/system/[email protected]
[Unit]
Description=Sent email
[Service]
Type=oneshot
ExecStart=/usr/bin/bash -c '/usr/bin/systemctl status %i | /usr/bin/mailx -Ssendwait -s "[SYSTEMD_%i] Fail" [email protected]'
systemdに追加:
systemctl enable /etc/systemd/system/notify-email@service
他のサービスでは追加します:
[Unit]
OnFailure=notify-email@%i.service
構成を再読み込みします。
systemctl daemon-reload
これを提供しているように見えるこのユーティリティに遭遇しました: https://github.com/joonty/systemd_mon