Linux,Unix,BSD/RaspberryPI

[RPi] 와치독(watchdog) 설정하기

채윤아빠 2022. 8. 3. 10:28
728x90
반응형

개요

라즈베리파이에 내장된 와치독 기능을 이용하여 기기가 먹통이 되는 등 하드웨어적으로 응답이 없을 경우, 자동으로 시스템이 재부팅이 되도록 설정할 수 있습니다.

특히 무선랜의 응답이 없을 경우에도 자동으로 와치독이 동작하도록 하는 방법을 알아보겠습니다.

 

와치독을 이용하는데 있어서 다음의 사항들에 대한 주의가 필요합니다.

  • 라즈베리파이가 무한 재부팅에 빠질수 있음
  • 강제 시스템 재시작에 따른 파일 손상(File corruption) 위험
  • 예상치 못한 재부팅

와치독의 파라미터를 조정하여 위 사항들을 최대한 배제할 수 있도록 해야 합니다.


와치독(watchdog) 설치

"/boot/config.txt" 파일에 다음과 같이 와치독 활성화를 위한 설정을 추가 후, 재부팅을 합니다.

pi@raspberrypi:~ $ echo 'dtparam=watchdog=on'sudo tee -a /boot/config.txt
dtparam=watchdog=on

라즈베리파이에 와치독이 활성화되어 있는지 확인합니다.

pi@raspberrypi:~ $ ls -al /dev/watch*
crw------- 1 root root  10, 130 Jul 28 10:12 /dev/watchdog
crw------- 1 root root 250,   0 Jul 28 10:12 /dev/watchdog0

만약 위 파일이 존재하지 않는다면, 와치독이 비활성화되어 있는 것입니다. 참고자료의 "라즈베리파이 - Watchdog Timer 설정":https://rottk.tistory.com/entry/라즈베리파이-Watchdog-Timer-설정 "bcm2835_wdt" 모듈을 활성화합니다.

 

다음과 같이 "watchdog" 패키지를 설치합니다.

pi@raspberrypi:~ $ sudo apt-get update -qq
pi@raspberrypi:~ $ sudo apt-get install -y watchdog
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
  watchdog
0 upgraded, 1 newly installed, 0 to remove and 10 not upgraded.
Need to get 82.5 kB of archives.
After this operation, 232 kB of additional disk space will be used.
Get:1 http://ftp.harukasan.org/raspbian/raspbian buster/main armhf watchdog armhf 5.15-2 [82.5 kB]
Fetched 82.5 kB in 3s (31.3 kB/s)
Preconfiguring packages ...
Selecting previously unselected package watchdog.
(Reading database ... 102095 files and directories currently installed.)
Preparing to unpack .../watchdog_5.15-2_armhf.deb ...
Unpacking watchdog (5.15-2) ...
Setting up watchdog (5.15-2) ...
update-rc.d: warning: start and stop actions are no longer supported; falling back to defaults
Created symlink /etc/systemd/system/default.target.wants/watchdog.service → /lib/systemd/system/watchdog.service.
Processing triggers for man-db (2.8.5-2) ...
Processing triggers for systemd (241-7~deb10u8+rpi1) ...

와치독(watchdog) 설정

다음과 같이 "/etc/watchdog.conf" 와치독 설정 파일을 생성합니다.

pi@raspberrypi:~ $ echo 'watchdog-device = /dev/watchdog'sudo tee -a /etc/watchdog.conf
watchdog-device = /dev/watchdog
pi@raspberrypi:~ $ echo 'watchdog-timeout = 15'sudo tee -a /etc/watchdog.conf
watchdog-timeout = 15
pi@raspberrypi:~ $ echo 'max-load-1 = 24'sudo tee -a /etc/watchdog.conf
max-load-1 = 24
pi@raspberrypi:~ $ echo 'log-dir = /var/log/watchdog'sudo tee -a /etc/watchdog.conf
log-dir = /var/log/watchdog

추가적으로 라즈베리파이의 무선랜의 상태도 감시하다가 무선랜에 문제가 있을 경우에도 자동으로 재부팅을 하고 싶다면 다음 내용을 추가합니다.

pi@raspberrypi:~ $ echo 'interface = wlan0'sudo tee -a /etc/watchdog.conf
interface = wlan0

무선랜 인터페이스로부터 데이터를 받지 못하면 다음과 같이 로깅이 되면서, 설정한 15초가 지나면 자동으로 재부팅됩니다.

Aug 02 19:48:32 raspberrypi watchdog[1557]: device wlan0 did not receive anything since last check
Aug 02 19:48:33 raspberrypi watchdog[1557]: device wlan0 did not receive anything since last check

와치독(watchdog) 서비스 시작 및 시험

다음과 같이 와치독 서비스를 실행합니다.

pi@raspberrypi:~ $ sudo systemctl enable watchdog
Synchronizing state of watchdog.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable watchdog
pi@raspberrypi:~ $ sudo systemctl start watchdog
pi@raspberrypi:~ $ sudo systemctl status watchdog
● watchdog.service - watchdog daemon
   Loaded: loaded (/lib/systemd/system/watchdog.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2022-08-02 19:26:45 KST; 5s ago
  Process: 12976 ExecStartPre=/bin/sh -c [ -z "${watchdog_module}" ] || [ "${watchdog_module}" = "none" ] || /sbin/m
  Process: 12977 ExecStart=/bin/sh -c [ $run_watchdog != 1 ] || exec /usr/sbin/watchdog $watchdog_options (code=exit
 Main PID: 12979 (watchdog)
    Tasks: 1 (limit: 4915)
   CGroup: /system.slice/watchdog.service
           └─12979 /usr/sbin/watchdog

Aug 02 19:26:45 raspberrypi watchdog[12979]: interface: no interface to check
Aug 02 19:26:45 raspberrypi watchdog[12979]: temperature: no sensors to check
Aug 02 19:26:45 raspberrypi watchdog[12979]: no test binary files
Aug 02 19:26:45 raspberrypi watchdog[12979]: no repair binary files
Aug 02 19:26:45 raspberrypi watchdog[12979]: error retry time-out = 60 seconds
Aug 02 19:26:45 raspberrypi watchdog[12979]: repair attempts = 1
Aug 02 19:26:45 raspberrypi watchdog[12979]: alive=/dev/watchdog heartbeat=[none] to=root no_act=no force=no
Aug 02 19:26:45 raspberrypi watchdog[12979]: watchdog now set to 15 seconds
Aug 02 19:26:45 raspberrypi watchdog[12979]: hardware watchdog identity: Broadcom BCM2835 Watchdog timer
Aug 02 19:26:45 raspberrypi systemd[1]: Started watchdog daemon.

다음 명령(Fork bomb)으로 라즈베리파이를 중단시켜 와치독이 정상적으로 동작하는지 시험해 볼 수 있습니다.

pi@raspberrypi:~ $ sudo bash -c ':(){ :|:& };:'

위 명령을 실행하면, 약 15초 후 라즈베리파이가 자동으로 재부팅됩니다.

와치독 동작여부는 "/var/log/syslog" 파일에서 확인할 수 있습니다.

Aug  2 19:53:42 raspberrypi watchdog[1142]: loadavg 165 35 11 is higher than the given threshold 24 18 12!
Aug  2 19:53:42 raspberrypi watchdog[1142]: shutting down the system because of error 253 = 'load average too high'
Aug  2 19:53:42 raspberrypi watchdog[1142]: /usr/lib/sendmail does not exist or is not executable (errno = 2)

참고자료