как использовать Linux Watchdog - PullRequest
17 голосов
/ 31 января 2012

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

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

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

Ответы [ 9 ]

16 голосов
/ 23 февраля 2012

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

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

Ну, это просто не соответствует действительности, очень возможно перезапустить один или несколько процессов после того, как сторожевой таймер подает сигнал о зависании системы - вы можете даже ОТМЕНИТЬ перезагрузку или выполнить SOFT-перезагрузку, можно настроить тест "and" repair "- скрипты / двоичные файлы, которые делают все, что вы от них хотите. Версия watchbox от busybox урезана до почти непригодного уровня ... я полагаю, что мир никогда не узнает, почему busybox-devs решили отказаться от основных функций - на данный момент было бы лучше вообще избегать busybox - > улучшения скорости практически отсутствуют, уменьшение размера не компенсирует огромную потерю функциональности. / bin / bash довольно маленький - перекомпилируйте все с флагом «-Os», если размер имеет значение, и вы готовы пойти - готовый сторожевой таймер, который позволяет получить практически все, что только можно пожелать.

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

15 голосов
/ 31 января 2012

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

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

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

8 голосов
/ 31 января 2012

Как насчет использования 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

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

4 голосов
/ 31 января 2012

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

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

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

2 голосов
/ 31 января 2012

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

Но, похоже, это не то, что вы хотите.Программный сторожевой механизм linux перезагрузит компьютер, а не просто перезапустит процесс.

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

1 голос
/ 24 февраля 2016

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

0 голосов
/ 08 мая 2018

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

0 голосов
/ 18 октября 2017

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

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

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

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

0 голосов
/ 26 июля 2017

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

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)

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

...