Как использовать Linux Watchdog

Привет, может кто-нибудь сказать мне, как обращаться с программным сторожевым таймером в Linux. У меня есть программа "SampleApplication", которая работает непрерывно, и мне нужно перезапустить ее, если она зависает или неожиданно закрывается.

Я гуглял по этому поводу и обнаружил, что у linux есть watchdog в /dev/watchdog, но я не знаю, как его использовать. Может ли кто-нибудь помочь мне с примером.

У меня вопрос, где мне указать имя приложения и интервал задержки для перезапуска. Поскольку я новичок в Linux, пожалуйста, сообщите мне пример, если это возможно. Спасибо

9 ответов

Решение

Большая часть Unix/Linux init Программы будут управлять демонами для вас и перезапускать их. Посмотрите на размещение вашего сервиса в /etc/inittab, Или вы можете использовать Upstart или же systemd,

Все эти программы запускаются как PID 1 и их работа - отслеживать и перезапускать системные процессы.

Из вашего тега Busybox я бы предположил, что вы используете встроенную систему. В этих случаях сценарии инициализации в стиле System V со всеми их сценариями оболочки действительно излишни. Вы, вероятно, должны разорвать все это и заменить его записями в /etc/inittab или upstart или системные задания.

Так как модераторы игнорируют пост-улучшения, теперь я буду публиковать их отдельно

Сторожевой таймер программного обеспечения Linux перезагрузит компьютер, а не только перезапустит ваш процесс.

Что ж, это просто неверно, очень возможно перезапустить один или несколько процессов после того, как сторожевой таймер подает сигнал, что системы зависают - вы даже можете отменить перезагрузку или выполнить SOFT-перезагрузку, можно настроить "тест" и " ремонт "-скрипты / двоичные файлы, которые делают все, что вы хотите, чтобы они сделали. Версия busybox от watchbox урезана до почти непригодного уровня... я полагаю, что мир никогда не узнает, почему busybox-devs решили отказаться от основных функций - на данный момент было бы лучше вообще избегать busybox - > улучшения скорости практически отсутствуют, уменьшение размера не компенсирует огромную потерю функциональности. /bin/bash довольно маленький - перекомпилируйте все с флагом "-Os", если размер имеет значение, и вы готовы пойти - готовый сторожевой таймер, который позволяет получить практически все, что только можно пожелать.

О, и ПОЖАЛУЙСТА, НЕ создавайте свой собственный сторожевой таймер - это, скорее всего, оставит вас с необработанными ошибками и однажды сделает вашу жизнь плохой.

Как насчет использования cron? Настройте небольшую работу cron, которая запускается каждую минуту. Проверьте, работает ли ваше приложение (используя ps), и если нет, перезапустите его.

Сделайте крошечный скрипт, подобный этому:

#!/bin/bash
if [ ! "$(pidof myapp)" ] 
then
  /path/to/myapp &
fi

Вы проверяете, есть ли myapp в списке процессов. "!" меняет тест. Если его там нет, запускается "myapp". "&" просто начинается с фона.

Добавьте это в cron. В зависимости от вашей системы и предпочтений, есть несколько способов сделать это. Классическим является использование crontab. Существует много документации о том, как указать строку crontab, но вы, вероятно, хотите что-то вроде этого:

* * * * * /path/to/the/script.sh > /dev/null

Это будет запускать ваш тест каждую минуту каждого часа каждого... Вы поняли.

Использование /etc/inittab Вы можете использовать его для запуска на определенных уровнях запуска, и если он убит, он должен быть перезапущен автоматически

n:2345:respawn:/path/to/app

Это заставит его возродиться на уровнях запуска 2345, вам, вероятно, понадобятся только 3 и 5, но это будет хорошо работать и встроено в Linux.

Если вы используете systemd, есть 2 сторожевых таймера: один для аппаратного обеспечения (с помощью systemd.conf или с помощью демона сторожевого таймера) и один для демонов, инициализированных как сервисы. Если вы выбрали systemd, взгляните на следующее: http://0pointer.de/blog/projects/watchdog.html

Документация для сторожевого пса находится здесь: http://linux.die.net/man/8/watchdog

Но, похоже, это не то, что вы хотите. Сторожевой таймер программного обеспечения Linux перезагрузит компьютер, а не только перезапустит ваш процесс.

Вы можете легко сделать свой собственный сторожевой таймер. Например, ваша программа может периодически записывать некоторый временный файл и запускать скрипт, который время от времени проверяет файл и перезапускает ваш процесс, если он не обновлялся в течение некоторого времени.

Вы можете использовать утилиту "Monit" для перезапуска и мониторинга своих сервисов. Просто установите, выполнив команду "apt-get install monit".

Если кто-то пришел на эту страницу в поисках сторожевого устройства операционной системы (что не совсем то, что хотел ОП), это то, что вам нужно:

sudo apt-get install watchdog
service watchdog status
service watchdog start 

Чтобы проверить, что это работает, выполните:

tail -f /var/log/syslog | grep watchdog

Вы должны увидеть что-то вроде:

Jul 25 22:03:35 nuc watchdog[14229]: still alive after 733 interval(s)
Jul 25 22:03:36 nuc watchdog[14229]: still alive after 734 interval(s)
Jul 25 22:03:36 nuc watchdog[14229]: still alive after 735 interval(s)
Jul 25 22:03:37 nuc watchdog[14229]: still alive after 736 interval(s)
Jul 25 22:03:37 nuc watchdog[14229]: still alive after 737 interval(s)

Я надеюсь, что отвечаю на вопрос правильно. Все остальные ответы кажутся очень разными.

Вы можете попробовать утилиту wdog, написанную на C++ и связанную с фреймворком Kahless_9. Исходный код для этого можно скачать с: https://github.com/zepher999/wdog и, следовательно, обновлять в соответствии с вашими потребностями. В будущем все еще будут внесены изменения в список TODO, но это должно соответствовать вашим текущим требованиям.

Утилита требует CSV-файл в качестве входных данных, в котором содержатся все процессы, которые должны отслеживаться с их аргументами. После запуска утилита запускает все эти процессы, указанные в файле csv, и отслеживает их на предмет завершения / завершения, после чего перезапускает процесс.

В настоящее время wdog позволяет останавливать / уничтожать отслеживаемые процессы, а также позволяет запускать утилиту в горячем или холодном режиме. Горячий режим позволяет утилите использовать кэшированные записи для мониторинга уже запущенных процессов, в то время как холодный режим запуска отбрасывает такие кэшированные значения, пытаясь запустить все процессы.

Утилита также имеет возможность запускать свой экземпляр, чтобы контролировать себя, тем самым имея сторожевой таймер для сторожевого таймера.

Другие вопросы по тегам