OpenMediaVault の状態をメールで通知するには、メニュー System > Scheduled Tasks を利用してシェルスクリプトを実行、という方法があります。シェルスクリプトの標準出力が cron のおかげでメール送信される、という仕掛けです。
これを真似て ProxMox Virtual Environment (PVE) の状態を通知させてみました。
PVE ではローカルの root ユーザーへメールを送ると、通知ターゲット(Notification Target) で指定した SMTP サーバーを経由して、そのメールを転送できます。
あらすじ
- 「ユーザー」を作って、宛先メールアドレスを指定します。
- 「通知ターゲット」を作って、SMTPサーバーと、作った「ユーザー」を指定します。
- 「通知 Matcher」の設定を変更して、作った「通知ターゲット」を指定します。
- 状態をテキスト出力するシェルスクリプトを作ります。
- root の crontab を編集して、作ったシェルスクリプトを定期的に実行させます。
ユーザー(宛先メールアドレス指定)を作る
データセンター > アクセス権限 > ユーザ
通知ターゲット(SMTPサーバー指定)を作る
データセンター > 通知 > 通知ターゲット
通知 Matcher の設定変更
データセンター > 通知 > 通知 Matcher
既定の「default-matcher」のタブ「通知するターゲット」で、既定の mail-to-root のチェックを外し、作った通知ターゲットにチェックを入れます。
シェルスクリプトを作る
#!/bin/bash
(
echo "<date>$(date)</date>";
echo "<uptime>$(uptime)</uptime>";
echo; #------------------------
echo "<free>";
free;
echo "</free>";
echo; #------------------------
echo "<lsblk -fipr>";
lsblk -fipr | grep "\s\S"; # a space followed by a non-space
echo "</lsblk>";
echo; #------------------------
IFNAME=vmbr0
echo "<ip address show $IFNAME>";
ip address show $IFNAME;
echo "</ip>";
echo; #------------------------
IFNAME=enp2s0
echo "<ethtool $IFNAME>";
/usr/sbin/ethtool $IFNAME | grep 'Speed\|Duplex';
echo "</ethtool>";
echo;
echo "<ip -statistics link show $IFNAME>";
ip -s link show $IFNAME;
echo "</ip>";
echo; #------------------------
echo "<ss --tcp --all (!TIME-WAIT)>";
ss -t -a | grep -v "^TIME-WAIT";
echo "</ss>";
echo; #------------------------
echo "<ss --udp --all>";
ss -u -a;
echo "</ss>";
echo; #------------------------
)
crontab に登録する
crontab で1日1回実行させます。
11 23 * * * sh /home/work/pve-status.sh
おしまい。