Что такое сторожевой таймер Linux

Обновлено: 07.07.2024

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

Подробнее об этом можно прочитать в статье Википедии на WDT.

Он предназначен в качестве крайней меры для поддержания доступности системы и, по крайней мере, для обеспечения того, чтобы администратор мог удаленно войти в систему для диагностики и устранения непостоянных неполадок. Очевидно, что это не предотвратит поломку системы из-за аппаратного сбоя и не поможет в случае постоянной проблемы с программным обеспечением, но для системы, которая в целом хорошо себя ведет (и особенно если она расположена на удаленном узле и/или иным образом необходим для работы) он служит для повышения общей доступности системы.

Если ваше приложение не может выдержать кратковременный сбой, то один только сторожевой таймер не решит проблему, вам нужно рассмотреть другие решения высокой доступности для оборудования (например, RAID для защиты от ошибок диска) и программного обеспечения (кластеризация и зеркалирование приложений). ), что обеспечит приемлемую степень общей доступности системы.

  • Фактический аппаратный таймер и модуль драйвера ядра, которые могут вызвать аппаратный сброс, и;
  • Фоновый демон пользовательского пространства, обновляющий таймер и предоставляющий более широкий набор параметров мониторинга работоспособности и восстановления.

Модуль сторожевого таймера

Обычно аппаратная поддержка сторожевого таймера — это просто таймер, который устанавливается на некоторое разумное время ожидания, а затем периодически обновляется запущенным программным обеспечением. Если по какой-либо причине программное обеспечение перестает обновлять аппаратное обеспечение (и не выключает его явным образом), время ожидания истекает и выполняется аппаратный сброс компьютера. Таким образом обычно можно восстановить даже ошибки типа паники ядра. Часто наборы микросхем, которые обеспечивают мониторинг системы (температура, напряжение питания, скорость вращения вентиляторов и т. д.), имеют сторожевой таймер, хотя никогда нельзя быть уверенным, что производитель материнской платы использовал его!

В контексте операционной системы Linux существует стандартный интерфейс к оборудованию сторожевого таймера, предоставляемый соответствующим драйвером устройства (модулем) ядра, представленным как /dev/watchdog (проверка этого является простой проверкой загружаемого модуля). ). Однако такой драйвер обычно не загружается по умолчанию, поэтому вам может потребоваться вручную настроить систему для его загрузки. Обычно это делается путем добавления имени модуля в /etc/modules или (еще лучше, чтобы он загружался по требованию) в /etc/default/watchdog путем редактирования watchdog_module="none" для указания имени модуля.

Linux также предоставляет программный сторожевой таймер с помощью модуля softdog. Хотя это лучше, чем ничего, это гораздо менее эффективно, чем аппаратное обеспечение! По сути, если ядро ​​выходит из строя, то и ваши средства восстановления в этом случае тоже.

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

Однако полная перезагрузка, как правило, нежелательна, поскольку она может привести к повреждению файловой системы, поэтому гораздо лучше вместо этого выполнить чистую перезагрузку.
[начало страницы]

Демон сторожевого пса

Для управления сторожевым устройством обычно используется фоновый демон, который может открыть устройство и обеспечить периодическое обновление. Тем не менее, машина также может попасть в очень непригодное для использования состояние без фактического прекращения работы фонового демона, поэтому демон сторожевого таймера для Linux можно настроить на периодический запуск ряда основных тестов, чтобы убедиться, что машина выглядит нормально.

При провале таких тестов (возможно, с определенным количеством повторных попыток, чтобы избежать слишком «счастливого запуска») демон может перезагрузить машину умеренно упорядоченным образом, чтобы вести журнал о том, почему это произошло, и мы надеемся избежать проблем с файловой системой и т. д. При этом он также имеет «страховку» аппаратного таймера, поэтому, если он не перезагрузится, для этого будет выполнен аппаратный сброс.

Это «умеренно упорядоченное» завершение работы не является обычным подходом к завершению работы на основе инициализации, когда выполняется правильная последовательность сценариев завершения работы, так как это, скорее всего, приведет к сбою в ряде условий, для которых требуется действие сторожевого таймера. требуется (например, системе не хватает памяти, не хватает табличного пространства процесса и т. д.).

Таким образом, вместо этого он выполняет "метод мушкетона" для остановки всех процессов, сигнализируя обо всем с помощью SIGTERM, а затем через 5 секунд с помощью неигнорируемого SIGKILL, затем он пытается обновить wtmp (чтобы зафиксировалось завершение работы), обновить случайным начальным числом (для сохранения энтропии), синхронизируйте часы CMOS с системным временем (чтобы обеспечить разумное системное время при перезагрузке) и, наконец, синхронизируйте и размонтируйте файловые системы перед попыткой сброса с помощью аппаратного таймера (если это возможно).

Подход с аппаратным сбросом предпочтительнее, чем API-интерфейс перезагрузки ядра, поскольку ядро ​​останавливает сторожевое оборудование при обычном завершении работы или перезагрузке, и, таким образом, может зависнуть сразу после этого момента без каких-либо средств автоматического восстановления (например, зависшая карта RAID). или аналогичный).

На самом деле для аппаратной поддержки сторожевого таймера используются два демона:

  • 'wd_keepalive' предоставляет только действия по открытию/обновлению/закрытию драйвера оборудования.
  • сторожевой таймер обеспечивает действия драйвера по открытию/обновлению/закрытию, а также различные другие проверки системы.

Нужен ли мне Watchdog?

Из введения видно, что большинству систем, которые используются «интерактивно», например домашнему ПК, это на самом деле не нужно. По сути, если он падает во время его использования, вы обычно пытаетесь нажать Ctrl+Alt+Del (может быть, также Ctrl+Alt+F1, чтобы попытаться войти в текстовый режим), и, если это не удается, просто нажмите кнопку сброса (или удерживайте нажатой кнопку кнопку питания в течение 5 секунд), чтобы восстановить машину.

Больше всего сторожевой таймер полезен в таких ситуациях, как наша, когда у вас постоянно работают компьютеры с аппаратным управлением или, что чаще всего, серверы, работающие на удаленных сайтах. В обоих случаях вы можете спать или отдыхать, когда что-то пойдет не так и/или восстановление потребует утомительной поездки на объект. В таких случаях крайне ценным средством является автоматическая перезагрузка.
[наверх страницы]
Последнее обновление: 26 августа 2019 г., Пол Кроуфорд
Авторское право (c) 2014–2019, Пол С. Кроуфорд. Все права защищены.
Электронная почта psc(at)sat(dot)dundee(dot)ac(dot)uk
Абсолютно никаких гарантий, используйте эту информацию на свой страх и риск.

Ядро Linux может перезагрузить систему при обнаружении серьезных проблем. Это может быть реализовано с помощью специального аппаратного сторожевого устройства или с помощью чуть менее надежного программного сторожевого устройства внутри ядра. В любом случае должен быть демон, который сообщает ядру, что система работает нормально. Если демон перестанет это делать, произойдет сброс системы.

watchdog — это такой демон. Он открывает /dev/watchdog и продолжает писать в него достаточно часто, чтобы ядро ​​не перезагружалось, по крайней мере, раз в минуту. Каждая запись откладывает время перезагрузки еще на одну минуту. Через минуту бездействия аппаратное обеспечение сторожевого таймера вызовет сброс. В случае программного сторожевого таймера возможность перезагрузки будет зависеть от состояния машин и прерываний.

Демон сторожевого таймера можно остановить, не вызывая перезагрузки, если устройство /dev/watchdog закрыто правильно, если только ядро ​​не скомпилировано с включенной опцией CONFIG_WATCHDOG_NOWAYOUT.< /p>

Тесты

Демон сторожевого таймера выполняет несколько тестов для проверки состояния системы: • Заполнена ли таблица процессов?

• Достаточно ли свободной памяти?

• Доступны ли некоторые файлы?

• Изменились ли какие-либо файлы в течение заданного интервала?

• Не слишком ли велика средняя рабочая нагрузка?

• Произошло ли переполнение таблицы файлов?

• Процесс все еще запущен? Процесс определяется файлом pid.

• Отвечают ли некоторые IP-адреса на ping?

• Получают ли сетевые интерфейсы трафик?

• Слишком высокая температура? (Данные о температуре не всегда доступны.)

• Выполнение определяемой пользователем команды для выполнения произвольных тестов.

• Выполните одну или несколько команд тестирования/восстановления из файла /etc/watchdog.d. Эти команды вызываются с аргументом test или repair. Если какая-либо из этих проверок не пройдена, сторожевой таймер вызовет отключение. Если какой-либо из этих тестов, кроме пользовательского бинарного файла, продлится дольше одной минуты, компьютер также будет перезагружен.

Параметры

Доступны следующие параметры командной строки: -v, --verbose Задать подробный режим. Реализуется только при компиляции с функцией SYSLOG. В этом режиме информация будет записываться в LOG_DAEMON с приоритетом LOG_INFO. Это полезно, если вы хотите точно знать, что происходило до тех пор, пока сторожевой таймер не перезагрузил систему. В настоящее время он регистрирует температуру (если доступна), среднюю загрузку, дату изменения файлов, которые он проверяет, и как часто он переходил в спящий режим. -s, --sync Пытаться синхронизировать файловую систему каждый раз, когда процесс активен. Обратите внимание, что система перезагружается, если по какой-либо причине синхронизация длится дольше минуты. -b, --softboot Мягкая загрузка системы, если во время основного цикла возникает ошибка, т.е. если данный файл недоступен через вызов stat(2).Обратите внимание, что это не относится к открытию /dev/watchdog и /proc/loadavg, которые открываются до начала основного цикла. -f, --force Принудительно использовать указанный интервал или максимальную среднюю нагрузку, указанную в файле конфигурации. -c config-file, --config-file config-file Использовать config-file в качестве файла конфигурации вместо используемого по умолчанию /etc/watchdog.conf. -q, --no-action Не перезагружать и не останавливать машину. Это для целей тестирования. Все проверки выполняются, и результаты регистрируются как обычно, но никаких действий не предпринимается. Также ваша аппаратная карта или драйвер сторожевого таймера программного обеспечения ядра не включены. Проверка температуры также отключена, так как на некоторых картах срабатывает аппаратный сторожевой таймер.

Функция

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

При высокой нагрузке на систему сторожевой таймер может быть выгружен из памяти и может не вернуться вовремя. В этих обстоятельствах ядро ​​Linux перезагрузит машину. Чтобы избежать ненужных перезагрузок, убедитесь, что для переменной realtime установлено значение yes в файле конфигурации watchdog.conf. Это добавляет поддержку сторожевого таймера в режиме реального времени: он блокируется в памяти, и проблем не должно быть даже при самых высоких нагрузках.

Также вы можете указать максимально допустимую среднюю нагрузку. Как только достигается это среднее значение нагрузки, система перезагружается. Вы можете указать максимальную среднюю нагрузку за 1 минуту, 5 минут или 15 минут. Значения по умолчанию — отключить этот тест. Будьте осторожны, чтобы не установить этот параметр слишком низким. Чтобы установить значение меньше предопределенного минимального значения 2, вы должны использовать параметр -f.

Вы также можете указать минимальный объем виртуальной памяти, который должен быть доступен как свободный. Как только больше виртуальной памяти используется, действие предпринимается сторожевым таймером. Обратите внимание, однако, что сторожевой таймер не делает различий между различными типами использования памяти. Он просто проверяет наличие свободной виртуальной памяти.

Если у вас есть сторожевая карта с датчиком температуры, вы можете указать максимально допустимую температуру. При достижении этой температуры система останавливается. Значение по умолчанию — 120. Преобразование единиц измерения не производится, поэтому убедитесь, что вы используете ту же единицу измерения, что и ваше оборудование. сторожевой таймер выдаст предупреждения, как только температура повысится на 90%, 95% и 98% от этой температуры.

При использовании файлового режима сторожевой таймер попытается выполнить stat(2) указанные файлы. Ошибки, возвращаемые stat, не вызывают перезагрузки. Для перезагрузки вызов статистики должен длиться не менее одной минуты. Это может произойти, если файл находится в смонтированной файловой системе NFS. Если ваша система использует файловую систему, смонтированную через NFS, вы можете попробовать этот вариант. Однако в таком случае параметр sync может не работать, если сервер NFS не отвечает.

сторожевой таймер может прочитать pid из файла pid и посмотреть, существует ли еще процесс. В противном случае меры принимаются сторожевым таймером. Таким образом, вы можете, например, перезапустить сервер из вашего repair-binary.

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

В режиме проверки связи сторожевой таймер пытается пропинговать заданные IP-адреса. Эти адреса не обязательно должны принадлежать одной машине. Вместо этого можно выполнить эхо-запрос на широковещательный адрес, чтобы проверить, жива ли хотя бы одна машина в подсети.

Не используйте этот широковещательный пинг, если ваш сотрудник MIS а) не знает об этом и б) не дал вам явного разрешения на его использование!

сторожевой таймер отправит три пинг-пакета и будет ждать ответа в течение нескольких секунд. Это время перехода в спящий режим между двумя запусками сторожевого устройства. Таким образом, недоступная сеть вызовет не аппаратный сброс, а программную перезагрузку.

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

сторожевой таймер может запускать внешние команды для пользовательских тестов. Код возврата, отличный от 0, означает, что произошла ошибка, и сторожевой таймер должен среагировать. Если внешняя команда прерывается неперехваченным сигналом, это также считается ошибкой сторожевого таймера. Команда может занять больше времени, чем квант времени, определенный для устройства ядра, без проблем. Однако сообщения об ошибках генерируются в средстве системного журнала.Если вы включили мягкую загрузку при ошибке, машина будет перезагружена, если двоичный файл не завершится в течение половины времени, в течение которого сторожевой таймер спит между двумя попытками запуска устройства ядра.

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

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

Мягкая перезагрузка

Мягкая перезагрузка (т. е. контролируемое выключение и перезагрузка) инициируется для каждой обнаруженной ошибки. Поскольку доступных процессов может не быть, сторожевой таймер делает все сам. Это означает: 1.

Завершить все процессы с помощью SIGTERM.

После небольшой паузы завершите все оставшиеся процессы с помощью SIGKILL.

Запишите запись о завершении работы в wtmp.

Сохраните случайное начальное число из /dev/urandom. Если устройство не существует или нет имени файла для сохранения, этот шаг пропускается.

Отключить учет.

Отключить квоту и своп.

Размонтировать все разделы, кроме корневого.

Перемонтировать корневой раздел только для чтения.

Отключите все сетевые интерфейсы.

Проверить двоичный файл

Если код возврата контрольного двоичного файла не равен нулю, сторожевой таймер примет ошибку и перезагрузит систему. Будьте осторожны с этим, если вы используете свойства сторожевого таймера в реальном времени, так как сторожевой таймер будет ждать возврата этого двоичного файла, прежде чем продолжить. Положительный код выхода интерпретируется как код системной ошибки (подробности см. в errno.h). Отрицательные значения относятся к сторожевому таймеру: -1

Перезагрузите систему. Это не совсем сообщение об ошибке, а команда для сторожевого таймера. Если код возврата равен -1, сторожевой таймер не будет пытаться вместо этого запустить сценарий завершения работы.

Сбросьте систему. Это не совсем сообщение об ошибке, а команда для сторожевого таймера. Если код возврата равен -2, сторожевой таймер просто откажется снова записывать устройство ядра.

Превышена максимальная средняя нагрузка.

Температура внутри слишком высокая.

/proc/loadavg не содержит (или недостаточно) данных.

Данный файл не был изменен за указанный интервал.

/proc/meminfo содержит неверные данные.

Дочерний процесс был остановлен по сигналу.

Дочерний процесс не вернулся вовремя.

Бесплатно для личного использования.

Восстановить двоичный файл

Двоичный файл восстановления запускается с одним параметром: номером ошибки, из-за которой сторожевой таймер инициировал процесс загрузки. После попытки восстановить систему двоичный файл должен завершиться с 0, если система была успешно восстановлена, и, следовательно, больше нет необходимости загружаться. Возвращаемое значение, отличное от 0, сообщает сторожевому таймеру о перезагрузке. Код возврата двоичного файла восстановления должен быть номером ошибки, вызывающей перезагрузку сторожевого таймера. Будьте осторожны с этим, если вы используете свойства реального времени, поскольку сторожевой таймер будет ждать возврата этого двоичного файла, прежде чем продолжить.

Тестовый каталог

Исполняемые файлы, помещенные в тестовый каталог, обнаруживаются сторожевым таймером при запуске и запускаются автоматически. Они ограничены по времени директивой test-timeout в watchdog.conf.

Эти исполняемые файлы вызываются либо с "тестом" в качестве первого аргумента (если выполняется проверка), либо с "восстановлением" в качестве первого аргумента (если выполняется восстановление ранее неудачной "тестовой" операции) .

Как и в случае тестовых двоичных файлов и восстановительных двоичных файлов, ожидаемые коды выхода для успешного тестирования или восстановления всегда равны нулю.

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

Например, если следующее выполнение возвращает 42:

Демон сторожевого таймера попытается устранить проблему, вызвав:

/etc/watchdog.d/my-test repair 42

Это позволяет администраторам и разработчикам приложений выполнять интеллектуальные команды тестирования/восстановления. Если операция «восстановления» не требуется (или ее успех маловероятен), важно, чтобы автор команды вернул ненулевое значение, чтобы машина по-прежнему перезагружалась, как ожидалось.

Обратите внимание, что демон сторожевого таймера может интерпретировать и действовать в соответствии с любым из зарезервированных кодов возврата, указанных в разделе "Проверка двоичного кода", до вызова данной команды в режиме "восстановления".

Пока ничего неизвестно.

Авторы

Исходный код — это пример, написанный Аланом Коксом, автором драйвера ядра. Все дополнения были написаны Майклом Мескесом. У Джони Ингрэма возникла идея протестировать среднюю нагрузку. Он также взял на себя работу, связанную с Debian. Дэйв Синедж упомянул о некоторых проблемах с аппаратным сторожевым таймером и помог протестировать этот материал.

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

Предупреждение: действуйте с осторожностью

Неправильная конфигурация сторожевого таймера в вашей системе может вызвать следующие проблемы:

  • Бесконечный цикл перезагрузки
  • Файл поврежден из-за аппаратного сброса.
  • Непредсказуемые случайные перезагрузки

Поэтому избегайте использования действующих серверов для тестирования сторожевого таймера ядра Linux.

Модуль сторожевого таймера

Функция сторожевого таймера на аппаратной стороне устанавливает таймер, который отключается по истечении заданного периода времени. Затем программное обеспечение сторожевого таймера периодически обновляет аппаратный таймер. Если программное обеспечение перестает обновляться, то по истечении заданного периода таймер выполняет аппаратный сброс устройства. Чтобы сторожевой таймер работал, производитель материнской платы должен использовать сторожевой таймер чипа. Часто в документации от производителя нет ясности о том, был ли реализован функционал. В этом случае вы должны протестировать его.

Кроме того, вам необходимо загрузить правильный модуль ядра сторожевого таймера в вашей системе Linux. Разные чипы используют разные модули. Например:

  • Наборы микросхем Intel могут использовать модуль «iTCO_wdt».
  • Оборудование HP может использовать «hpwdt».
  • Мейнфреймы IBM могут использовать «vmwatchdog»
  • Xen VM может использовать «xen_wdt»

После загрузки модуля вы можете проверить /dev/watchdog в системе Linux. Если этот файл присутствует, это означает, что был загружен драйвер устройства или модуль ядра сторожевого таймера. Система периодически продолжает писать в /dev/watchdog. Это также называется «пинать или кормить сторожевого пса». Если системе не удается кикнуть или скормить сторожевому таймеру, то через некоторое время происходит хард-ресет системы.

Демон сторожевого таймера

Демон сторожевого таймера открывает устройство и обеспечивает необходимое обновление, чтобы предотвратить сброс системы. Он может тестировать табличное пространство процесса, использование памяти, доступность файлов, рабочую перегрузку, переполнение таблицы файлов, пинг IP-адреса, трафик сетевого интерфейса, температуру, запущенные процессы и многое другое. Если тесты не пройдены, сторожевой таймер вызывает отключение.

Запуск и остановка Watchdog

Демон Watchdog должен запускаться во время загрузки и работать в фоновом режиме. Вы можете проверить, работает ли он:

Если ядро ​​НЕ скомпилировано с параметром CONFIG_WATCHDOG_NOWAYOUT, то правильное закрытие /dev/watchdog не приведет к перезагрузке. Вы можете записать символ V в /dev/watchdog, а затем закрыть файл. Это должно остановить сторожевой таймер.

Тестирование сторожевого таймера

Если вы хотите проверить, работает ли аппаратный сторожевой таймер, вы можете сделать следующее из командной строки администратора:

И дважды нажмите «ввод» и подождите. Подсказка не вернется. Через некоторое время, в зависимости от настроек вашего ядра, система должна выполнить жесткую перезагрузку.

Ссылки:

Об авторе

Зак Х

Зак Х. живет в Лос-Анджелесе. Ему нравится калифорнийское солнце, ему нравится работать с новыми технологиями и писать на темы Linux и DevOps.

Кто-нибудь может сказать мне, как обращаться с программным сторожевым таймером в Linux?

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

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

Мой вопрос: где указать имя приложения и интервал задержки для перезапуска?


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

У меня есть опыт работы с инструментом во встроенном приложении Linux, который делает именно то, что вы просите, к сожалению, я не могу вспомнить его название, иначе я бы опубликовал ответ, но я знаю, что он работает более или менее так, как вы. предлагается в любом случае, так что это вовсе не плохая идея. Другим вариантом является использование определенного порта на локальном хосте с адресом 27.0.0.1 и отправка процессов на него, а ваш программный сторожевой демон отслеживает это. /dev/watchdog предназначен для аппаратного сторожевого таймера, ваш демон может поддерживать его, так что в конечном итоге, если демон остановится, система перезагрузится (в крайнем случае).

9 ответов 9

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

Ну, это просто неправда, очень возможно перезапустить один или несколько процессов после того, как сторожевой таймер подаст сигнал о том, что система зависла - вы даже можете ПРЕРЫВАТЬ перезагрузку или выполнить МЯГКУЮ перезагрузку, можно настроить "тест". " и "восстановление" - скрипты / двоичные файлы, которые делают все, что вы от них хотите. Busybox-версия сторожевого таймера урезана почти до непригодного для использования уровня. я думаю, мир никогда не узнает, почему разработчики busybox решили отказаться от основных функций - на данный момент было бы лучше вообще избегать busybox --> улучшения скорости почти не существует, уменьшение размера не компенсирует огромное потеря функциональности. /bin/bash довольно мал - перекомпилируйте все с флагом "-Os", если размер имеет значение, и вы готовы к работе - встроенный сторожевой таймер, который позволяет практически все, что можно пожелать.

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

Но если сторожевой таймер сигнализирует о зависании системы, это не идентифицирует отдельный процесс для перезапуска. Это не ответ на вопрос — мониторинг одного или нескольких процессов из другого является законной целью, а не достижением через /dev/watchdog. Вопрос даже не предполагает создания собственного сторожевого таймера; это просто демонстрирует непонимание разницы между устройством /dev/watchdog и процессом мониторинга программного обеспечения (или сторожевым таймером программного обеспечения).

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

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

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

Привет, @Zan, спасибо за ваш вклад, я добавил "::respawn:/path/app" в /etc/inittab, и приложение заработало нормально после перезапуска устройства, единственная проблема в том, что эта запись является временной и удаляется. автоматически после перезагрузки устройства. Есть ли способ сделать процедуру инициализации постоянной.

@ITion: Это не должно быть временным. Вы должны использовать initrd для вашего каталога /. Или, возможно, у вас есть / только для чтения и верхний слой для чтения и записи.

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

Создайте такой крошечный скрипт:

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

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

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

Привет, @Janne, спасибо за ответ. Но Linux, который я использую, это Busybox, и у него нет Cron. Есть ли другой способ.

Итак, встроенная система. То, что именно доступно, зависит от конкретного установленного на нем Linux (busybox — это просто приложение, обычно используемое во многих небольших системах). Если ничего не помогает, вы всегда можете написать небольшое приложение на языке C, которое находится в цикле по времени и отслеживает список процессов или какой-либо файл состояния, который записывает ваше приложение, а затем при необходимости перезапускает ваш процесс.

@Janne, возможно ли создать крошечный скрипт, который ищет имя процесса, поскольку pid всегда меняется? С уважением, Роберт

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

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


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

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


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

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

Чтобы убедиться, что он работает, выполните:

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

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

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

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

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

Сторожевой таймер ядра Linux используется для контроля за работой системы. Предполагается автоматическая перезагрузка зависших систем из-за неисправимых программных ошибок. Модуль сторожевого таймера зависит от используемого оборудования или микросхемы.

Как вы тестируете сторожевой таймер?

Используйте существующий некритичный выход, например светодиод, в качестве тестового сигнала. Запрограммируйте плату тестовой последовательностью, которая будет переключать светодиод и петлю, а не сторожевой таймер. Тест на петлю. Затем запрограммируйте его на выполнение второго цикла, до которого он не дойдет, если указанный сторожевой таймер не перезагрузится.

Как отключить сторожевой таймер?

Выполните следующие действия, чтобы отключить приложение Dell Watchdog Timer:

  1. Нажмите F2 на заставке Dell, чтобы войти в программу настройки системы.
  2. Нажмите "Обслуживание".
  3. Выберите «Поддержка сторожевого таймера».
  4. Установите флажок «Отключить сторожевой таймер».
  5. Нажмите «Применить» и «Выйти».

Что такое сторожевая цепочка?

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

Какова цель сторожевого таймера?

Сторожевой таймер — это простой таймер обратного отсчета, который используется для сброса микропроцессора через определенный интервал времени. В правильно работающей системе программное обеспечение будет периодически «приручать» или перезапускать сторожевой таймер.

Как узнать, работает ли сторожевой таймер в Linux?

После загрузки модуля вы можете проверить /dev/watchdog в системе Linux. Если этот файл присутствует, это означает, что был загружен драйвер устройства или модуль ядра сторожевого таймера. Система периодически продолжает писать в /dev/watchdog. Это также называется «пинать или кормить сторожевого пса».

Как удалить Watchdog из Windows 10?

Удалите программы, связанные с Watchdog, из панели управления

  1. Нажмите на меню "Пуск" и выберите "Настройки".
  2. Затем нажмите "Система" и выберите "Приложения и функции" в левом столбце.
  3. Найдите Watchdog в списке и нажмите кнопку "Удалить" рядом с ним.
  4. Подтвердите, нажав кнопку «Удалить» в открывшемся окне, если это необходимо.

Что такое сторожевой таймер DPC нарушает Windows 10?

Что такое ошибка нарушения сторожевого таймера DPC? Нарушение сторожевого таймера DPC (код ошибки: DPC_Watchdog_Violation) — распространенная проблема в операционной системе Windows. Это произошло по определенным причинам, таким как неподдерживаемая прошивка SSD, старая версия драйвера SSD, проблемы с аппаратной несовместимостью или повреждение системных файлов.

Как работают сторожевые таймеры?

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

Что такое независимый сторожевой таймер?

Независимый сторожевой таймер используется для обнаружения и устранения неполадок, связанных с программными сбоями. Он запускает последовательность сброса, если он не обновляется в течение ожидаемого временного окна. … После включения он вызывает активацию низкоскоростного внутреннего генератора, и его можно отключить только с помощью сброса.

Что такое сторожевой таймер Intel?

Утилита сторожевого таймера Intel® позволяет мини-ПК Intel® NUC, комплекту или плате использовать аппаратный сторожевой таймер платформы, чтобы контролировать, работает ли приложение.

Что такое наблюдательная организация?

Лицо или группа лиц, которые наблюдают за деятельностью другого юридического лица (например, физического лица, корпорации, некоммерческой группы или государственной организации) от имени общественности, чтобы гарантировать, что это юридическое лицо не ведет себя незаконно или неэтично: организация по контролю за соблюдением прав потребителей, организации по защите прав потребителей или активисты.

Что такое реле Watchdog?

Сторожевое реле для карт контроллера ACR (кроме ACR1500) представляет собой герконовое реле с сухим контактом.… Это реле предназначено для использования в цепях защитной блокировки, используемых в системе, управляемой картой контроллера ACR. Реле Watchdog срабатывает при подаче питания на карту ACR и проходит проверку функции DSP.

Как рассчитывается время ожидания сторожевого таймера?

Самое продолжительное время будет, когда короткая задача запускается в начале периода, а следующая задача завершается сразу в конце периода, что дает 60 мс (время простоя в конце периода) + 100 мс (еще одно период) = 160 мс между срабатываниями сторожевого таймера.

Читайте также: