RaspberryPi Zero W と Zero WH で遊んでいるのですが、
時として、リソース不足からなのか止まることがあり、
cronで再起動するようにしていました。
なのですが、どうやらリソース不足を見張る番犬がいるみたいなので、
そちらで設定をし直したので、レポートします。
参考資料
ほぼ、次の内容の焼き直し
Linux でシステムのフリーズを検知して自動的に再起動させる方法
RaspberryPiでWatchdogTimerを構成する方法
Raspberry Pi 3/ Zero / Zero W等で watchdogを有効化する
環境
cat /sys/firmware/devicetree/base/model
Raspberry Pi Zero W Rev 1.1
cat /etc/os-release
PRETTY_NAME="Raspbian GNU/Linux 10 (buster)"
NAME="Raspbian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"
cat /proc/version
Linux version 5.10.103+ (dom@buildbot) (arm-linux-gnueabihf-gcc-8 (Ubuntu/Linaro 8.4.0-3ubuntu1) 8.4.0, GNU ld (GNU Binutils for Ubuntu) 2.34) #1529 Tue Mar 8 12:19:18 GMT 2022
やること
- watch docの設定
- 設定ファイルの変更
- リブート
watch docの設定
概要
- 設定ファイル追記
/boot/config.txt
/etc/systemd/system.conf.d/watchdog.conf
/etc/modprobe.d/bcm2835-wdt.conf
reboot
- 確認
sudo dmesg | grep bcm2835-wdt
sudo dmesg | grep systemd | grep watchdog
設定ファイル追記
/boot/config.txt
# Watchdog timer
dtparam=watchdog=on
コマンド
sudo nano /boot/config.txt
やってること
ここでは起動時にwatch docを有効にする設定をしてるっぽいです。
Raspberry Pi はBIOSを持たないらしく、BIOSで設定すべきことを/boot/config.txt
に記述してあげることで変更できるとのこと。
なので、このファイルは起動時の一回だけ読み込まれて、
以降の変更は再起動しないと適応されないとのことです。
調べる中でちょっと興味を引いたのが、起動中はsudo nano /boot/config.txt
で修正してreboot
となるのですが、
そもそも起動してなくてもSDカード自体をPCで読み込んで編集できたりします。
ということは、試行錯誤してるなかで起動できない状況になった時に
逃げ道になるなぁ、なんて感じました。
資料
OSの設定(config.txt) - Raspberry Pi公式ドキュメントを日本語訳
https://igarashi-systems.com/sample/translation/raspberry-pi/configuration/config-text.html
Raspberry Pi で boot/config.txt ファイルを編集する 3 つの方法
https://ja.linux-console.net/?p=12699
/etc/systemd/system.conf.d/watchdog.conf
既定値
#RuntimeWatchdogSec=0
設定値
RuntimeWatchdogSec=5
コマンド
sudo mkdir /etc/systemd/system.conf.d/
sudo touch /etc/systemd/system.conf.d/watchdog.conf
sudo nano /etc/systemd/system.conf.d/watchdog.conf
やってること
watch docが確認する時間間隔をLinuxの管理システムに設定してあげています。
/etc/systemd/system.conf
を直接編集することは非推奨で、
/etc/systemd/system.conf.d/
下に設定ファイルを作りなさいとのとのことでした。
なので、
/etc/systemd/system.conf.d/Watchdog.conf
に設定項目を記入します。
なお、設定ファイル名は.conf
であればいいとのことで、
今回はわかりやすくwatchdog.conf
というファイル名で作成しています。
systemdはLinuxのサービスやデーモンを管理する仕組みで、
その設定ファイルである
/etc/systemd/system.conf
に
watch docの設定が記載されています(既定値)。
/etc/systemd/system.conf
は
コンパイル中に設定されたデフォルト値とのことで、
コメントアウトされているところから項目としては持っているものの、
現在はnullあるかいであるのかと思われます。
ここで、/etc/systemd/system.conf.d/Watchdog.conf
に
RuntimeWatchdogSec=5
と設定してあげることで、
既定値が上書きされ、5秒に一度死活確認を行うとのことです。
この設定値のことをHeartBeatというらしく
直訳すると鼓動になるのですが、
値の意味からは5秒に一度「生きてますかー?」と
問いかけをしているようなものなので、
ちょっとチグハグだなぁ、なんて感じました。
資料
systemdのお勉強 #Linux - Qiita
https://qiita.com/s_szk/items/1c8fff34aa5ea744dba9
Linux でシステムのフリーズを検知して自動的に再起動させる方法 #Linux - Qiita
https://qiita.com/noraworld/items/239a73686290107c0e11
systemd-system.conf(5) — systemd — Debian testing — Debian Manpages
https://manpages.debian.org/testing/systemd/systemd-system.conf.5.en.html
/etc/modprobe.d/bcm2835-wdt.conf
options bcm2835_wdt heartbeat=10 nowayout=0
コマンド
sudo touch /etc/modprobe.d/bcm2835-wdt.conf
sudo nano /etc/modprobe.d/bcm2835-wdt.conf
やってること
カーネルモジュールの読み込みの設定を行い、
watchdogへのheartbeatの時間を設定している、との事です。
bcm2835はRaspberryPi Zeroなどに搭載されいてるチップで、
そのチップで設定できる項目の値の設定を行っています。
/etc/modprobe.d/
の下に.conf
の
ファイルがあると読み込まれるとのことで、
bcm2835-wdt.conf
のファイルを作成し、
上記の項目を書き込み再起動することで有効になるっぽいです。
資料
RaspberryPiでWatchdogTimerを構成する方法 #RaspberryPi - Qiita
https://qiita.com/arta-crypt/items/017cf94e4d9714bd46b7
Raspberry Pi搭載CPUの変遷にみた「上手なチップ開発術」:この10年で起こったこと、次の10年で起こること(26)(2/4 ページ) - EE Times Japan
https://eetimes.itmedia.co.jp/ee/articles/1806/29/news035_2.html
動作確認
再起動
設定したファイル群は起動時に読み込まれるものがほとんどなので、
再起動して設定が反映されるようにします。
コマンド
sudo reboot
内容の確認
コマンド
sudo dmesg | grep bcm2835-wdt
sudo dmesg | grep systemd | grep watchdog
やってること
Linuxカーネルが起動時に出力したメッセージを表示する
dmesg
でwatchdogに関する表記があるか、
また、watchdogに関するフォルダーがあるかを見て、
設定が有効かどうかを見ていきます。
出力
$ sudo dmesg | grep bcm2835-wdt
[ 3.457458] bcm2835-wdt bcm2835-wdt: Broadcom BCM2835 watchdog timer
有効であると、上のようにbcm2835について設定した項目が表示されます。
$ ls /dev/ | grep watchdog
watchdog
watchdog0
また、watchdogが有効化されると
/dev/watchdog
と/dev/watchdog0
が追加されるので、
それを確認します。
資料
RaspberryPiでWatchdogTimerを構成する方法 #RaspberryPi - Qiita
https://qiita.com/arta-crypt/items/017cf94e4d9714bd46b7
RaspberryPiでWatchdogTimerを構成する方法 #RaspberryPi - Qiita
https://qiita.com/arta-crypt/items/017cf94e4d9714bd46b7#27-%E5%8B%95%E4%BD%9C%E7%A2%BA%E8%AA%8D
【 dmesg 】コマンド――カーネルが出力したメッセージを表示する:Linux基本コマンドTips(74) - @IT
https://atmarkit.itmedia.co.jp/ait/articles/1612/20/news023.html
Watchdog Timer(WDT)とはなにか?
コンピューターシステムが動いているかを確認する“タイマー”とのことです。
Watchdogは番犬という意味っぽいんで、
見張ってるんだなあなんて思っていたものの、
はてさてタイマーとはなんぞやと思って、
あれこれ調べて見たら、定期的な書き込みを行う処理を監視し、
一定時間行われなかった場合に
あらかじめ設定した処理を行うというもの、らしいです。
なので、システムのハングアップなどが起きたとき、
それを感知して再起動したりしてくれるので、
フリーズしたまま静かに固まり続けるというのを避けることができる。らしいです。
その実装はハードウェアとソフトウェアの二通りあって、
RaspberryPiの場合にはハードウェアでの実装があるので、
ちょっとの追加設定で使えるとのことでした。