LoginSignup
1
1

RaspberryPi ZeroにWatchdog Timer(WDT)を設定して、リソース不足時に再起動させる設定にしたメモ

Posted at

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

/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

既定値

/etc/systemd/system.conf
#RuntimeWatchdogSec=0

設定値

/etc/systemd/system.conf.d/Watchdog.conf
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

/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の場合にはハードウェアでの実装があるので、
ちょっとの追加設定で使えるとのことでした。

参考
ウォッチドッグタイマー wikipedia

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1