Raspberry Pi 4BのSoC温度を1分間隔で計測してファイル出力
目次
概要
家庭内でRaspberry Pi 4Bを常時起動のサーバとして使っています。 負荷の高い処理は実行していないので、CPU使用率も低いし、SoC温度もきっと低いものと思います。 その代わり冷却を手抜きしているので、夏場の暑い時期やたまに集中的に利用しているときに SoC温度が上昇し、サーマルスロットリングが発生していないかが少し気になるので、 後から確認できるようにSoC温度をファイルに記録することにしました。 本当はグラフ化して推移を見られるようにしたいのですが、今回は1分間隔で繰り返しファイル出力するところまで実装しました。 温度計測にはラズパイ標準のvcgencmdを利用してcronで定期実行しているだけです。
構成
サーバ構成
ハードウェア
Raspberry Pi 4 Model B 8GB
OS
AlmaLinux release 8.5 (Arctic Sphynx) aarch64
ソフトウェア・パッケージ
- vcgencmd version b99321a10f46c9bd662fc87998419c5d6974927a
環境構築
インストール
vcgencmdのインストール
「AlmaLinux 8.5にvcgencmdをインストールしてラズパイの情報を表示する」を参考に vcgencmdをインストール済みであることが前提となります。
vcgencmdの実行確認
vcgencmdをインストール済みの場合、以下のようにラズパイのSoC温度を表示することができます。
# vcgencmd measure_temp temp=37.0'C
設定
ログ出力用ディレクトリの作成
SoC温度を計測してファイル出力する際の出力先ディレクトリを作成します。 出力先は /var/log/rpi/ とします。
# cd /var/log/ # mkdir -m 755 rpi # ls -ld rpi drwxr-xr-x. 2 root root 4096 Jan 13 12:05 rpi
シェルスクリプト格納ディレクトリの作成
後ほど作成するSoC温度を計測してファイル出力するシェルスクリプトを格納するディレクトリを作成します。 ディレクトリは /data/shell/ とします。
# cd / # mkdir -m 777 data # ls -ld data drwxrwxrwx. 2 root root 4096 Jan 13 11:57 data # cd data/ # mkdir -m 777 shell # ls -ld shell drwxrwxrwx. 2 root root 4096 Jan 13 11:58 shell # cd shell/
SoC温度計測用シェルスクリプトの作成
通常失敗するコマンドでもないので、正常に情報を取得できたかのチェックなどは省略して簡易的に作成します。 温度を計測した年月日時分秒とSoC温度を1回1行でファイルに出力します。 SoC温度は「temp=37.0'C」と表示されるので、cutで数字部分だけを切り取ります。
# vi measure_temp.sh
※ファイルを新規作成※
#!/bin/bash
DATETIME=`date "+%Y-%m-%d %H:%M:%S"`
SOC_TEMP=`/opt/vc/bin/vcgencmd measure_temp | cut -d "=" -f 2 | cut -d "'" -f 1`
echo "$DATETIME $SOC_TEMP" >> /var/log/rpi/soc_temp.log
exit 0
シェルスクリプトのパーミッション変更
シェルスクリプトに実行権限を付与します。 rootユーザのcronで実行する予定なので、ファイルの所有者だけ実行できるようにします。
# ls -l measure_temp.sh -rw-r--r--. 1 root root 72 Jan 13 12:04 measure_temp.sh # chmod 744 measure_temp.sh # ls -l measure_temp.sh -rwxr--r--. 1 root root 72 Jan 13 12:04 measure_temp.sh
シェルスクリプトの動作確認
作成したSoC温度計測用シェルスクリプトを実行して、ファイルに実行した年月日時分秒とSoC温度が出力されるか確認します。
# /data/shell/measure_temp.sh
# cat /var/log/rpi/soc_temp.log
2024-01-13 12:18:54 37.9 ←正常に出力された(表示例では37.9℃)
rootユーザのcrontabへシェルスクリプトを1分間隔で実行するよう登録
初期状態ではrootユーザのcrontabは存在していませんでしたので、 作成しつつ情報を登録します。 crontab -e を実行すると、viエディタが起動してcrontabを編集できます。 最後にファイルを保存するとcrontabへ書き込まれます。 measure_temp.sh を1分間隔で実行する設定を入れます。
# crontab -l no crontab for root # crontab -e no crontab for root - using an empty one crontab: installing new crontab
※ファイルを新規作成※
* * * * * /data/shell/measure_temp.sh
crontabの登録確認
rootユーザのcrontabに正常に登録されたことを確認します。 rootユーザのcrontabの実体としては/var/spool/cron/rootに情報が保存されています。
# crontab -l * * * * * /data/shell/measure_temp.sh # ls -l /var/spool/cron/root -rw-------. 1 root root 39 Jan 13 13:58 root # cat /var/spool/cron/root * * * * * /data/shell/measure_temp.sh
cronで繰り返し実行されるかの確認
crontabへの登録が終わるとすぐに実行が始まるので、少し待って1分間隔でファイルに繰り返し書き込まれていることを確認します。
# cat /var/log/rpi/soc_temp.log 2024-01-13 12:18:54 37.9 ←シェルスクリプトの動作確認で出力されたもの 2024-01-13 14:08:01 37.9 ←これ以降がcronで1分間隔で出力されたもの 2024-01-13 14:09:01 37.4 2024-01-13 14:10:01 37.9