Однажды у меня завис 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
- — максимальная загрузка системы (load average), при превышении которой будет инициирован рестарт.
max-load-1
- и
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
- — если сервер не может достучаться до внешнего IP, считается, что есть проблемы с сетью.
ping
- — проверка доступности порта (например, HTTP).
tcp
- — если свободной памяти меньше указанной, сервер будет перезагружен.
memory
Что важно помнить
- Watchdog — мощный инструмент. Если его неправильно настроить, можно случайно устроить перезагрузки по кругу.
- Всегда тестируйте конфигурацию в изолированной среде.
- Следите за логами: и
journalctl -u watchdog
/var/log/syslog
Получается, что…
После настройки watchdog я наконец-то перестала бояться, что сервис упадёт в самый неподходящий момент. Особенно если уехать куда-нибудь без интернета. Этот инструмент — отличный помощник для любого администратора VPS, который хочет автоматизировать восстановление и уменьшить простои. Обязательно попробуйте — он лёгкий, надёжный и незаменимый.