- 【Raspberry Pi監視】Raspberry PiでGmailを送信できるようにする
- 【Raspberry Pi監視】監視プログラムを作成する(この記事)
- 【Raspberry Pi監視】cronを設定する
前回の記事で、Raspberry PiからGmailを使ってメールを送信できるようになりました。
続いてメールの本文となる監視内容を作成するプログラムを作成していきます。
関連記事:linuxでテキスト編集(1)
RasPi Checkアプリの項目を見てみよう
RasPi Checkでは次の項目が確認できます。
項目名 | 内容 | 今回の監視対象 |
OVER CLOCKING | Raspberry Piに関する項目(CPU温度/周波数など) | 〇 |
SYSTEM | 稼働時間/メモリー/ディストリビューションなど | 〇 |
NETWORK | ネットワークインターフェース情報 | × |
DISK USAGE | ディスク使用状況 | 〇 |
PROCESSES | プロセス情報 | × |
NETWORKとPROCESSESに関する情報は今回はスルーします。
続いて各項目の情報を取得、成形していこうと思います。
OVER CLOCKING
OVER CLOCKINGでは、CPUの温度、周波数、電圧、ファームウェアバージョンを表示しています。
Raspberry Piではvcgencmdというコマンドでこれらの情報を取得することができます。
vcgencmdの使い方、オプションは以下のページに記載されています。
https://www.raspberrypi.org/documentation/raspbian/applications/vcgencmd.md
基本的な使い方は次の通り。
1 2 3 4 5 |
vcgencmd [コマンド] [オプション] # 使用例 $ vcgencmd measure_clock arm frequency(45)=700000000 |
取得したい情報をヒアドキュメントでリスト化し、whileコマンドで連続実行するようにしました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
tmp=/tmp/$$$(basename $0) # vcgencmdで取得するパラメータリスト cat << FIN > $tmp-param measure_temp measure_clock arm measure_clock core measure_volts version FIN # OVERCLOCKING用ステータス取得 cat $tmp-param |\ while read param ; do vcgencmd ${param} ; done > $tmp-vcgen |
$tmp-vcgenをcatした結果↓
1 2 3 4 5 6 7 |
temp=44.9'C frequency(45)=900000000 frequency(1)=250000000 volt=1.2500V Sep 20 2019 18:22:03 Copyright (c) 2012 Broadcom version 6aa4372223e8c728f255f5e4489f6cde1e364ada (clean) (release) (start) |
続いて、取得した情報をawkを使って、RasPi Checkっぽい表記に整形していきます。
1 2 3 4 5 6 |
## OVERCLOCKING項目 awk 'NR==1{print "CORE Temperature:",substr($1,6,6)}' $tmp-vcgen > $tmp-ov awk 'NR==2{print "ARM Frequency:",substr($1,15,9)/1000000" MHz"}' $tmp-vcgen >> $tmp-ov awk 'NR==3{print "CORE Frequency:",substr($1,14,9)/1000000" MHz"}' $tmp-vcgen >> $tmp-ov awk 'NR==4{print "CORE Volt:",substr($1,6,6)*1" V"}' $tmp-vcgen >> $tmp-ov awk 'NR==7{print "Firemware:",$2$3$4$5}' $tmp-vcgen >> $tmp-ov |
$tmp-ovをcatした結果↓
1 2 3 4 5 |
CORE Temperature: 44.9'C ARM Frequency: 900 MHz CORE Frequency: 250 MHz CORE Volt: 1.25 V Firemware: 6aa4372223e8c728f255f5e4489f6cde1e364ada(clean)(release)(start) |
それっぽくなりました。
OVER CLOCKING項目の完成です。
SYSTEM
続いてSYSTEMの項目を作成します。
SYSTEM項目はそれぞれ以下のコマンドで取得できます。
項目名 | 取得コマンド |
Startup | uptime |
Average load | uptime |
Main memory | free -h |
Swap memory | free -h |
Distribution | cat /etc/issue |
Serial No | cat /proc/cpuinfo |
Last refresh | uptime -s |
OVER CLOCKING項目で使用したvcgencmdのようなコマンドは使用せず、linuxの標準コマンドのみで取得できる情報でした。
以下のようにして情報を取得、整形しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
## SYSTEM項目 awk '{print NF}' $tmp-upt > $tmp-check if [ $(cat $tmp-check) -eq 11 ] ; then awk '{printf "%s\n%s\n", "Startup:"$3*1" 分前","Average load:"$10*100"%"}' $tmp-upt > $tmp-sy elif [ $(cat $tmp-check) -eq 10 ] ; then awk '{printf "%s\n%s\n", "Startup:"$3*1" 時間前","Average load:"$9*100"%"}' $tmp-upt > $tmp-sy elif [ $(cat $tmp-check) -eq 12 ] ; then awk '{printf "%s\n%s\n","Startup:"$3*1" 日前","Average load:"$11*100"%"}' $tmp-upt > $tmp-sy elif [ $(cat $tmp-check) -eq 13 ]; then awk '{printf "%s\n%s\n","Startup:"$3*1" 日前","Average load:"$12*100"%"}' $tmp-upt > $tmp-sy fi cat $tmp-freeh |\ awk 'NR==2{printf "%s %s %2d\n","Main memory:",$2-$6"MB/"$2*1"MB",($2-$6)/$2*100}' |\ awk '{print $1,$2,$3"("$4"%)"}' >> $tmp-sy cat $tmp-freeh |\ awk 'NR==3{printf "%s %s %.f\n","Swap memory:",$3*1"MB/"$2*1"MB",$3/$2*100}' |\ awk '{if($4>100){print $1,$2,substr($3,0,3)/1000"MB/"substr($3,8,2)"MB",$4/1000}else{print $0}}'|\ awk '{print $1,$2,$3"("$4"%)"}' >> $tmp-sy awk '{print "Distribution:"$1,$2,$3}' /etc/issue >> $tmp-sy awk 'NR==13{print "Serial No:"$3}' /proc/cpuinfo >> $tmp-sy cat $tmp-upts |\ sed 's/-/\//g' |\ awk '{print "Last refresh:"$0}' >> $tmp-sy |
uptimeの出力結果は、起動から1時間未満/1日未満/1日以上でフィールド数が変化することが分かったので、フィールド数によって条件を分岐できるようif文を使いました。
uptimeの出力結果は、起動から1時間未満/1日未満/1日と1時間未満/1日と1時間以上で、フィールド数が11/10/12/13と変化することが分かったので、if分を使って処理を変えることにしました。
$tmp-syをcatした結果↓
1 2 3 4 5 6 7 |
Startup:5 日前 Average load:19% Main memory: 211MB/432MB(48%) Swap memory: 1MB/99MB(1%) Distribution:Raspbian GNU/Linux 9 Serial No:0000000014decab5 Last refresh:2020/09/01 10:22:57 |
SYSTEM項目の完成です。
DISK USAGE
この項目は一番簡単でした。
ディスクの空き容量を確認できるdfコマンドにオプションhを付けて実行した結果を出すだけです。
ただし、localeが日本語になっていると出力結果に日本語が混ざるので、環境変数を設定しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
df -hの出力結果(日本語表記になってしまう) $ df -h ファイルシス サイズ 使用 残り 使用% マウント位置 /dev/root 7.2G 3.5G 3.4G 52% / devtmpfs 213M 0 213M 0% /dev tmpfs 217M 0 217M 0% /dev/shm tmpfs 217M 5.8M 211M 3% /run tmpfs 5.0M 4.0K 5.0M 1% /run/lock tmpfs 217M 0 217M 0% /sys/fs/cgroup /dev/mmcblk0p1 42M 23M 19M 55% /boot LANG=C df -hの出力結果(英語表記になる) $ LANG=c df -h Filesystem Size Used Avail Use% Mounted on /dev/root 7.2G 3.5G 3.4G 52% / devtmpfs 213M 0 213M 0% /dev tmpfs 217M 0 217M 0% /dev/shm tmpfs 217M 5.8M 211M 3% /run tmpfs 5.0M 4.0K 5.0M 1% /run/lock tmpfs 217M 0 217M 0% /sys/fs/cgroup /dev/mmcblk0p1 42M 23M 19M 55% /boot |
上記の点に気を付けてプログラムを書きます。
1 2 |
## DISK USAGE項目 LANG=C df -h > $tmp-dfh |
メール送信
続いて、取得した情報である$tmp-ovと$tmp-syと$tmp-dfhをメール本文に貼り付けて送信します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
## メール送信 content=$(cat <<-FIN > $tmp-mail Hllo,this mail is Raspberry Pi Check. //CHECK TIME `date` //OVERCLOCKING $(cat $tmp-ov) //SYSTEM $(cat $tmp-sy) //DISK USAGE $(cat $tmp-dfh) //LOG ${home}/LOG/LOG.$(basename $0).$(date +%H%M%S_%H%M%S) This mail was sent from Rspberry Pi. Send only FIN ) cat $tmp-mail |\ mail -s "Raspi Check Mail_$(date +%Y%m%d%H%M%S)" XXXXXXXXXX@gmail.com |
これでメールが送信されます。
受信メール
作成したプログラムを実行すると次のようなメールが届きます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
件名:Raspi Check Mail_20200906215046 本文: Hllo,this mail is Raspberry Pi Check. //CHECK TIME 2020年 9月 6日 日曜日 21:50:45 JST //OVERCLOCKING CORE Temperature: 43.3'C ARM Frequency: 900 MHz CORE Frequency: 250 MHz CORE Volt: 1.25 V Firemware: 6aa4372223e8c728f255f5e4489f6cde1e364ada(clean)(release)(start) //SYSTEM Startup:5 日前 Average load:8% Main memory: 211MB/432MB(48%) Swap memory: 1MB/99MB(1%) Distribution:Raspbian GNU/Linux 9 Serial No:0000000014decab5 Last refresh:2020/09/01 10:22:57 //DISK USAGE Filesystem Size Used Avail Use% Mounted on /dev/root 7.2G 3.5G 3.4G 51% / devtmpfs 213M 0 213M 0% /dev tmpfs 217M 0 217M 0% /dev/shm tmpfs 217M 8.5M 208M 4% /run tmpfs 5.0M 4.0K 5.0M 1% /run/lock tmpfs 217M 0 217M 0% /sys/fs/cgroup /dev/mmcblk0p1 42M 23M 19M 55% /boot //LOG /home/pi/LOG/LOG.RASPI_CHECK.20200906215046 This mail was sent from Rspberry Pi. Send only |
想定通り動くことが確認できたので、次はcronを設定していきます。
次の工程:【Raspberry Pi監視】cronを設定する
Raspberry Pi はじめてガイド―[Raspberry Pi 4完全対応]
Raspberry Pi 4 4B-64GB(技適マーク入)MicroSDHCカード64G/Raspbianシステムプリインストール/カードリーダ /5.1V/3A Type-C スイッチ付電源/MicroHDMI-to-HDMIケーブルライン/三つヒートシンク/簡単に取り付けケース/日本語取扱説明書/12ヶ月保証
Samsung EVO Plus マイクロSDカード 128GB microSDXC UHS-I U3 100MB/s Full HD & 4K UHD Nintendo Switch 動作確認済 MB-MC128HA/EC 国内正規保証品
コメント