Найти в Дзене
Wissance

Ubuntu самопроизвольно перезагружается? Проблема в обновлениях безопасности ядра.

На одном из наших (Wissance, wissance.com) серверов я стал замечать, что в случайные моменты времени сервер недоступен по сети (ssh, http и т.п.). Сам сервер обслуживает несколько Web-приложений и на перезапуск уходит внушительное время (ок. 5-10 мин), что для приложений работающих в режиме 24/7 просто недопустимо. Данная головная боль отравляла мне жизнь в течение продолжительного времени. Но все-таки я смог решить ее.

Первоначально я проверил состояние CPU (lm-sensors), оперативной памяти (memtester) и дисков (hdparm, badblocks, smart, smartctl, iostat, mdstat), но каждый раз я получал информацию о том, что с оборудованием все ОК, вот, например, вывод температуры:

Температура в норме (утилита lm-sensors)
Температура в норме (утилита lm-sensors)

Анализ файлов логов в папке /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

Всем добра и минимума перезагрузок!