OSS Fan ~OSSでLinuxサーバ構築~

このエントリーをはてなブックマークに追加

Raspberry Pi 4BのSoC温度を1分間隔で計測してファイル出力

カテゴリ:OSSセットアップ | ソフトウェア:Linux | タグ:
最終更新日:2024-01-14 | 公開日:2024-01-14

目次

概要

 家庭内で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
ファイル名:/data/shell/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
ファイル名:/var/spool/cron/root
※ファイルを新規作成※
* * * * * /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

参考にしたサイト