К содержанию
fohbookбета/ TouchDesigner для света

Watchdog и самовосстановление

Проект упадёт — вопрос, как быстро он встанет и что увидит зал. Три уровня, heartbeat файлом, внешний watchdog с пределом перезапусков, состояние на диске и чего он не чинит.

Ветка вашего пульта:
Быстрый выбор:

Проект упадёт, и вопрос только в том, сколько до восстановления и что увидит зал.

Уровней три. Внутри проекта ошибка в одной ветке не роняет остальное: try/except в колбэках, значения по умолчанию, рискованное в отдельном процессе. Снаружи watchdog следит, жив ли процесс, и поднимает его. И перезагрузка машины — по расписанию и как крайняя мера.

def onFrameEnd(frame):
    if frame % 60 == 0:
        with open('D:/show/alive.txt', 'w') as f:
            f.write(str(absTime.seconds))
    return

Проект подаёт признак жизни — проще всего файлом раз в секунду, — а внешний скрипт смотрит на его возраст: старше 10 секунд — завис или упал. Можно и по OSC на вторую машину или в систему мониторинга.

раз в 30 секунд:
    процесс TouchPlayer.exe существует?  нет → запустить
    alive.txt свежее 10 секунд?          нет → убить и запустить
    счётчик перезапусков за час < 5?     нет → перезагрузить машину

Сам watchdog — PowerShell, Python или bat в планировщике, и последнее условие важно: бесконечный круг перезапусков хуже одной честной перезагрузки.

import json
def save_state(d):
    with open('D:/show/state.json', 'w') as f:
        json.dump(d, f)

После перезапуска шоу продолжается, а не начинается заново: состояние пишут на диск при каждом изменении и читают при старте — кью, мастер, режим. Шоу по таймкоду проще, там состояние считается из времени.

Секунды перезапуска

Пока проект встаёт, DMX не идёт, и многие узлы и приборы держат последнее значение — свет замирает. Инсталляции это терпимо, шоу — нет: резервная машина (Резерв) или дежурная картина, которую консоль держит независимо от вас.

Watchdog не починит ошибку в логике — перезапуск вернёт то же поведение; сеть — проект встанет и опять не увидит контроллеры; перегрев и усталость железа; полный диск. Поэтому его ставят в паре с мониторингом: watchdog поднимает проект, мониторинг показывает, что было. Порядок действий при отказе — Падение во время шоу.

Убить нарочно

Завершить процесс в диспетчере задач и засечь, когда всё вернулось. И так в разных состояниях шоу.

Нашли в статье ошибку, устаревшее или непонятное место?

рядом по смыслу