Однажды у меня завис nginx на VPS в момент, когда я уехала на два дня. Почту с алертом я не прочитала, а сайт лежал. С тех пор у меня на сервере всегда включён watchdog — тот самый “сторожевой таймер”, который не даст сервису молча упасть. В этой статье расскажу, как я настроила watchdog на своём VPS, чтобы автоматически перезапускать важные сервисы вроде nginx, MySQL, или любого другого демона.
Что такое watchdog?
Watchdog — это системный инструмент, который следит за состоянием системы или процессов. Если они не отвечают, он может перезапустить конкретный сервис или даже перезагрузить всю машину. На уровне ядра работает watchdog timer, который отсчитывает время: если за определённый период не пришёл «сигнал жизни», он сработает.
Используется для:
- мониторинга состояния сервисов,
- автоматического перезапуска зависших процессов,
- предотвращения полной заморозки сервера,
- поддержки критически важных приложений.
Установка watchdog в Linux
На большинстве VPS (будь то Ubuntu, Debian или CentOS) установка происходит через пакетный менеджер.
Для Ubuntu/Debian:
sudo apt update
sudo apt install watchdog
Для CentOS/AlmaLinux/Rocky:
sudo yum install watchdog
После установки не забудьте включить и добавить в автозагрузку:
sudo systemctl enable watchdog
sudo systemctl start watchdog
Конфигурация watchdog
Файл конфигурации обычно лежит здесь: /etc/watchdog.conf
Типичный пример минимальной конфигурации:
watchdog-device = /dev/watchdog
max-load-1 = 24
interval = 10
realtime = yes
priority = 1
file = /tmp/testfile
change = 1407
Что тут важно:
watchdog-device— устройство, которое используется для мониторинга.max-load-1— максимальная загрузка системы (load average), при превышении которой будет инициирован рестарт.fileиchange— проверка на изменение файла (например, лог-файла), если не изменяется — считаем, что сервис завис.
Перезапуск конкретного сервиса
Вместо перезагрузки всей системы можно настроить watchdog так, чтобы он перезапускал конкретный сервис. Для этого лучше использовать скрипты или встроенный systemd + cron.
Пример проверки и перезапуска nginx:
Добавьте в crontab:
*/2 * * * * systemctl is-active nginx || systemctl restart nginx
Но можно и через watchdog использовать пользовательский скрипт. Для этого добавьте в /etc/watchdog.conf:
test-binary = /usr/local/bin/check-nginx.sh
А в check-nginx.sh:
#!/bin/bash
if ! systemctl is-active --quiet nginx; then
systemctl restart nginx
fi
Не забудьте:
chmod +x /usr/local/bin/check-nginx.sh
Продвинутая проверка: ping, tcp, memory
В конфиге можно использовать и другие параметры:
ping = 8.8.8.8
ping-count = 2
tcp = 127.0.0.1:80
memory = 2048
ping— если сервер не может достучаться до внешнего IP, считается, что есть проблемы с сетью.tcp— проверка доступности порта (например, HTTP).memory— если свободной памяти меньше указанной, сервер будет перезагружен.
Что важно помнить
- Watchdog — мощный инструмент. Если его неправильно настроить, можно случайно устроить перезагрузки по кругу.
- Всегда тестируйте конфигурацию в изолированной среде.
- Следите за логами:
journalctl -u watchdogи/var/log/syslog
Получается, что…
После настройки watchdog я наконец-то перестала бояться, что сервис упадёт в самый неподходящий момент. Особенно если уехать куда-нибудь без интернета. Этот инструмент — отличный помощник для любого администратора VPS, который хочет автоматизировать восстановление и уменьшить простои. Обязательно попробуйте — он лёгкий, надёжный и незаменимый.