На одном из наших (Wissance, wissance.com) серверов я стал замечать, что в случайные моменты времени сервер недоступен по сети (ssh, http и т.п.). Сам сервер обслуживает несколько Web-приложений и на перезапуск уходит внушительное время (ок. 5-10 мин), что для приложений работающих в режиме 24/7 просто недопустимо. Данная головная боль отравляла мне жизнь в течение продолжительного времени. Но все-таки я смог решить ее.
Первоначально я проверил состояние CPU (lm-sensors), оперативной памяти (memtester) и дисков (hdparm, badblocks, smart, smartctl, iostat, mdstat), но каждый раз я получал информацию о том, что с оборудованием все ОК, вот, например, вывод температуры:
Анализ файлов логов в папке /var/log не позволил обнаружить причины перезапуска (если, что то искал как grep -rnw /var/log -e reboot). Далее я решил проверить в какие моменты времени происходит перезагрузка, чтобы определить наличие/отсутствие какого-либо заданного периода и т.п. Ниже представлен сжатый результат вывода информации о перезагрузках, полученных в результате выполнения команды last reboot:
```
reboot system boot 4.15.0-140-gener Fri Mar 26 19:41 still running
reboot system boot 4.15.0-139-gener Tue Mar 23 14:29 still running
reboot system boot 4.15.0-137-gener Sat Mar 20 11:10 still running
reboot system boot 4.15.0-136-gener Sat Mar 13 04:26 still running
reboot system boot 4.15.0-136-gener Tue Mar 9 07:16 still running
reboot system boot 4.15.0-136-gener Wed Mar 3 11:46 still running
```
В этом выводе меня насторожило изменение версии ядра системы, т.е. по каким-то причинам происходит изменение версии ядра. Это может означать лишь то, что происходит установка обновлений, значит все, что нам нужно сделать это вырубить автоматические апдэйты системы. Тут на всякий случай я сделал следующее:
1. Зафиксировал версию ядра системы
для этого выполним команду sudo apt-mark hold {kernel-version} (но как выяснилось, апдэйты текущей версии будут приводить к перезагрузке, поэтому вариант зафиксировать версию и подождать выхода последних апдейтов, либо использовать альтернативный вариант по ссылке, приведенной ниже):
Кроме того есть дополнительный способ отключения апдэйтов, смотри здесь: https://vojcik.net/hot-to-disable-automatic-kernel-updates-ubuntu/
2. Отключил автоматические обновления софта и библиотек
На сервере у меня установлена дополнительно графическая оболочка XFCE и я выключил апдэйты программного обеспечения с помощью утилиты с графическим интерфейсом:
После выполнения этих операций сервер перестал действовать на нервы постоянными перезагрузками. Однако лучше периодически применять апдэйты безопасности ядра используя следующий алгоритм:
```
apt-mark unhold {kernel}
sudo unattended-upgrade --dry-run -d
apt-mark hold {kernel}
```
Полное описание apt-mark смотри здесь: http://manpages.ubuntu.com/manpages/bionic/man8/apt-mark.8.html
Всем добра и минимума перезагрузок!