web-dev-qa-db-ja.com

systemd-monitoredサービスが失敗状態になったときに通知を受け取ります

Systemdサービスがクラッシュまたはハングしたときにネットワークメッセージを送信する必要があります(つまり、失敗した状態になります。WatchdogSec=を使用してハングを監視します)。新しいsystemdにFailureAction =があることに気付きましたが、これは任意のコマンドを許可せず、再起動/シャットダウンのみを許可することを確認しました。

具体的には、systemdがプログラムのクラッシュを検出したときに1つのネットワークメッセージを送信し、ハングしたことを検出したときに別のネットワークメッセージを送信する方法が必要です。

「ログを解析する」よりも良い答えを期待しており、ほぼ瞬時の応答時間が必要なので、ポーリングアプローチは適切ではないと思います。イベントの発生によってトリガーされるものでなければなりません。

36
Display Name

systemdユニットは、ユニットが故障したときにユニット(またはそれ以上)をアクティブにするOnFailureをサポートしています。あなたはのようなものを置くことができます

 OnFailure=notify-failed@%n

次に、必要な 指定子 (おそらく少なくとも%iが必要です)を使用して通知を送信するスクリプトまたはコマンドを起動できる[email protected]サービスを作成します。

http://northernlightlabs.se/systemd.status.mail.on.unit.failure で実際的な例を見ることができます

35
Pablo Martinez

通知するちょうど私の方法:

/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
20
ceinmart

これを提供しているように見えるこのユーティリティに遭遇しました: https://github.com/joonty/systemd_mon

0