Systemdによってサービスとして実行される重要なアプリケーションがあります。
障害が発生するとすぐに再起動するように設定されています。
アプリケーションが再起動した場合にメールを送信するにはどうすればよいですか?
まず、2つのファイルが必要です。メールを送信するための実行可能ファイルと、実行可能ファイルを開始するための.serviceです。この例では、実行可能ファイルはsendmail
を使用したシェルスクリプトです。
/usr/local/bin/systemd-email:
#!/bin/bash
/usr/bin/sendmail -t <<ERRMAIL
To: $1
From: systemd <root@$HOSTNAME>
Subject: $2
Content-Transfer-Encoding: 8bit
Content-Type: text/plain; charset=UTF-8
$(systemctl status --full "$2")
ERRMAIL
使用する実行可能ファイルが何であれ、このシェルスクリプトが行うように、少なくとも2つの引数を取る必要があります。送信先のアドレスとステータスを取得するためのユニットファイルです。作成する.service
は、次の引数を渡します。
/etc/systemd/system/[email protected]:
[Unit]
Description=status email for %i to user
[Service]
Type=oneshot
ExecStart=/usr/local/bin/systemd-email address %i
User=nobody
Group=systemd-journal
ここで、userは電子メールで送信されるユーザーであり、addressはそのユーザーの電子メールアドレスです。受信者はハードコードされていますが、レポートするユニットファイルはインスタンスパラメータとして渡されるため、この1つのサービスで他の多くのユニットにメールを送信できます。この時点で[email protected]
を起動して、メールを受信できることを確認できます。
次に、メールを送信するサービスを編集し、OnFailure=status-email-user@%n.service
を[Unit]
セクションに追加します。 %n
は、ユニットの名前をテンプレートに渡します。
SystemdサービスオプションのExecStartPostを使用してみてください。
説明はここにあります:
https://www.freedesktop.org/software/systemd/man/systemd.service.html
このオプションの宣言は、サービス定義ファイルでさらに記述できます。 1つずつトリガーされます。
システムにもいくつかの例があります。