Черный сторожевой пес Beaglebone в Python

У меня есть Beaglebone Black с Debian, и мне нужен скрипт, работающий в фоновом режиме, который каждые несколько секунд будет проверять, работает ли система. Насколько я понимаю, watchdog в BBB аппаратный и работает независимо от ОС, поэтому он может перезагрузить устройство, даже если ОС полностью зависла (верно?). Вот очень простой пример из logicssupply:

#!/usr/bin/env python

import time
import os

os.nice(20)
time.sleep(60)                  # Wait before starting
wd = open("/dev/watchdog", "w+")
while 1:
     wd.write("\n")
     wd.flush()
     time.sleep(5)

Но я не могу найти способ изменить тайм-аут по умолчанию. В C это будет выглядеть так:

ioctl(fd, WDIOC_SETTIMEOUT, &timeout);

Но вызов функций ioctl в Python кажется довольно неясным. Из этого обсуждения кажется, что определения макросов C могут иметь разные значения в зависимости от оборудования. Есть ли удобный способ решить их (по крайней мере, этот конкретный, чтобы изменить тайм-аут сторожевого таймера по умолчанию) в Python? И как лучше запустить скрипт в фоновом режиме, чтобы он мог перезагрузить систему с зависшей ОС?


person Josh K.    schedule 20.04.2015    source источник
comment
Вы не можете сделать это из конфига сторожевого таймера или использовать pid? Вы действительно хотите перезагрузиться, если сценарий не работает?   -  person Padraic Cunningham    schedule 20.04.2015
comment
@PadraicCunningham BBB будет использоваться в качестве контроллера в мобильном роботе. Если возникла проблема с ОС или управляющим ПО (сбой/зависание), нам необходимо как можно скорее восстановить управление. Вот почему я хотел бы перейти на как можно более низкий уровень.   -  person Josh K.    schedule 20.04.2015
comment
Я не слишком хорошо знаком с сторожевым таймером, но, глядя на справочную страницу, я подумал, что установка интервала будет работать linux.die.net/man/5/watchdog.conf   -  person Padraic Cunningham    schedule 20.04.2015
comment
@PadraicCunningham, это работает, спасибо! Я отказался от идеи сделать это через ioctl, вместо этого изменив файл .conf.   -  person Josh K.    schedule 02.05.2015


Ответы (1)


Этот комментарий от Падраик Каннингем направил меня на man-страница для watchdog.conf, которая является правильным и рабочим способом настройки аппаратного WDT на AM335x, поэтому нет необходимости в дополнительных скриптах/демонах:

watchdog-timeout = 10
person Josh K.    schedule 16.09.2019