raspberry piでサーバー運用しているので稼働状況をメールで自動的にメールで送らせるようにする。
前提条件
OS : raspberry pi OS (buster)
mail server: postfix+dovecot (これでないといけないというわけではない)
範囲 : LAN内でのみ使用 (securityは考えない)
方針
- LAN内でのみ使用
- postfixでサポートのsendmailインターフェースを使う
(mutt でトライしたがうまく動かせず断念) - 簡単のためシェルを使う
- メールのsubjectにはアルファベットを使う。
- 計測するデータは、cpuの温度、メモリー使用状況、SSD使用容量、smart状況
メール送信用コマンド
mytools/health.sh | sendmail -i -t
mytools/health.shが計測用シェル兼sendmailへのインターフェース部
シェルの中身
#!/bin/bash
echo from: sender_name@domain_name
echo to: receiver_name@domain_name
echo subject: raspi server status report
echo Content-Type: text/plain;charset="UTF-8"
echo
echo ------ date and time ----------
date
echo
echo ----- cpu temparature -----------
vcgencmd measure_temp
echo
echo ------- memory usage -----------
free -h
echo
echo -------- device usage ---------
df -h
echo
echo ------- SSD smart data ----------
smartctl -d sat -A /dev/sda
sender_name, receiver_name, domain_name, /dev/sdaは実際の値に調整する。
ユーザー追加
sudo useradd sender_name -s /sbin/nologin
sudo passwd sender_name
sudo mkdir /home/sender_name
sudo chown sender_name:sender_name /home/sender_name
下2行の必要性がよくわからないが、/var/log/mail.errに出てくるエラーを消すためにいろいろしていて、その結果上記の様にしたところメール送信ができたため。
cronの設定
次の様な内容のファイル(例えばhealthcheck)を作成し、/etc/cron.dに配置する。
なお、オーナーをrootにしておかないとcronがエラーになったのでrootにする。
超参考となったサイト:https://www.server-memo.net/tips/etc-crontab.html
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=""
HOME=/home/pi
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,$
# | | | | |
# * * * * * user-name command to be executed
7 10 * * * root /home/pi/mytools/health.sh | sendmail -i -t
7 22 * * * root /home/pi/mytools/health.sh | sendmail -i -t
sudoがcronの中で使おうとすると、"TTY onknown"となったのでsudoを使わないようにするsmartctlをcronの中で使えるようにする。従ってユーザーもrootとする。
最後は、メーラ側の設定を行いおしまい
Leave a Comment