У меня есть сервер, который отслеживается Watchdog, и он иногда перезагружается из-за неисправного сетевого оборудования, которое я не могу заменить в данный момент. Как я прочитал, Watchdog отправляет SIGTERM всем процессам, запрашивая безопасное завершение работы, и через короткое время отправляет SIGKILL, который немедленно останавливает процесс. Однако в этом случае это приводит к повреждению данных, поскольку основной процесс еще не полностью завершен и имеет незаписанные данные.
Сколько времени занимает эта пауза у Watchdog между запросом всех процессов на остановку и принудительной их остановкой? Она жестко зашита в Watchdog, установлена в watchdog.conf (если она была, то никогда не была задокументирована в man-странице) или совпадает с другой системной настройкой? Как изменить эту настройку?
Редактировать: Я нашел причину тайм-аута, но все еще ищу инструкции по правильной перестройке и интеграции с системой.
решение1
Официальная версия 5.15 на Sourceforge теперь включает эту опцию. Ее можно настроить в файле watchdog.conf с помощью строки:
sigterm-задержка = 5
(закомментировано в файле примера). Обратите внимание, что экспериментальную версию 'V6' больше не следует использовать, так как 5.15 содержит практически все ее функции, а также несколько исправлений ошибок. Также обратите внимание, что веб-сайт 'sat' может быть закрыт позднее в 2019 году из-за прекращения финансирования NERC.
решение2
Отисточник Watchdog, shutdown.c
строка 445пауза жестко запрограммирована в Watchdog и составляет пять секунд.
решение3
Я разместил некоторую информацию о создании, настройке и тестировании демона-сторожевого таймера Linux здесь:
http://www.sat.dundee.ac.uk/~psc/watchdog/Linux-Watchdog.html
Короткий ответ: вам необходимо настроить вашу систему для сборки этого проекта:
sudo apt-get build-dep watchdog
sudo apt-get install build-essential automake libtool
Затем получите исходный код, который у вас, вероятно, уже есть, но последнюю версию можно получить, выполнив следующие действия:
sudo apt-get install git
git clone git://git.code.sf.net/p/watchdog/code watchdog-code
Перейдите в каталог с кодом и подготовьтесь к компиляции:
cd watchdog-code
autoreconf -i
./configure
Затем в исходный каталог и скомпилируйте его:
cd src
make clean
make
В текущем каталоге у вас будут новые двоичные файлы. Протестируйте их, прежде чем сделать их "живыми" с помощью sudo make install
, или, по крайней мере, сделайте резервные копии системных программ. Они раздуты по сравнению с системными из-за отладочных символов, вы можете использовать команду strip, если хотите уменьшить их размер.
Можете ли вы сказать, сколько времени необходимо для того, чтобы SIGTERM сработал?
Отредактировано для добавления:
Если вы используете текущий GIT pull (14 сентября 2013 г.), то отредактируйте shutdown.c и в строке 363 измените "safe_sleep(4);", чтобы получить желаемое значение тайм-аута в секундах. При редактировании кода для системного сторожевого таймера (как указано выше) будьте осторожны, чтобы не sleep() дольше, чем аппаратный тайм-аут (обычно 60 секунд), так как система просто перезагрузится! Для этого и нужна функция safe_sleep(), чтобы сторожевой таймер был подпитан во время ожидания.