Moje Rapsberry Pi - Watchdog

raspipidi

Linux je sám o sobě spolehlivý systém... V případě nějakého problému (interního či vnějšího vlivu - například problém s napájením, jiskření a jiné rušení...) se může vyskytnout stav tzv. zakousnutí systému. Tento jev se dá vyřešit tím, že k RPI dojdeme a restartujeme ho ručně (odpojením od napájení). Ovšem ne vždy máme možnost k RPI neustále chodit v případě poruchy... Tento problém vyřeší WDT systém.

WDT je časovač, který se musí po určité době nulovat (neustále se zasílá příkaz pro vynulování). V případě zamrznutí systému se přestane WDT nulovat a tím dojde k přetečení časovače WDT. WDT provede restart systému. Tzn. v případě problému (zakousnutí) vyřeší WDT reset RPI.

Máme štěstí :-) Broadcom BCM2708 obsahuje i HW Watchdog. Máme k dispozici dva způsoby použití watchdogu v RPI (a nebo b nelze obojí!)

a) použijeme démona pro hlídání RPI systému

Nainstalujeme Watchdog (WDT):

sudo apt-get install watchdog

Otevřeme v editoru soubor /etc/watchdog.conf:

sudo nano /etc/watchdog.conf

a odkomentujeme (dáme pryč křížek) na řádcích (nebo i jiné křížky):

watchdog-device = /dev/watchdog

max-load-1             = 24

Otevřeme v editoru soubor /etc/modules

sudo nano /etc/modules

a přidáme položku:

# watchdog
bcm2708_wdog

Spustíme příkaz k aktivaci modulu a služby:

sudo modprobe bcm2708_wdog 

sudo service watchdog restart

sudo apt-get install watchdog chkconfig

sudo chkconfig watchdog on
sudo /etc/init.d/watchdog start

Pro test služby zahltíme systém (RPI se během chvíle samo restartuje):

:(){ :|:&};:

b) použijeme pro hlídání našeho programu (běh programu v Pythonu, pokud se náš program kousne dojde k restartu RPI)

Nainstalujeme Watchdog (WDT):

sudo apt-get install python-dev
sudo apt-get install python-pip
sudo easy_install watchdogdev

Otevřeme v editoru soubor /etc/modules

sudo nano /etc/modules

a přidáme položku:

# watchdog
bcm2708_wdog

Spustíme příkaz k aktivaci modulu a služby:

sudo modprobe bcm2708_wdog

test program pro Python:

#!/usr/bin/env python
import subprocess
from time import sleep
from watchdogdev import *

wd = watchdog('/dev/watchdog')

# povolime hw watchdog
command = 'sudo modprobe bcm2708_wdog'
subprocess.Popen(command , shell=True,stdout=subprocess.PIPE)

print "Watchdog bezi a hlida chod programu"

# smycka
while True:
      wd.keep_alive() # musime do 10 sec vzdy spustit jinak restart rpi
      print "WDT cas= ",wd.get_time_left()
      sleep(1)

# pokud program ukoncime dojde do 10 sekund k restartu RPI

# pro ukonceni wdt je nutne do naseho programu pridat:
# wd.magic_close() # vypne wdt a nedojde k restartu RPI