Мониторинг температуры в Linux: как не пропустить перегрев сервера

Проблема

Сервер работает, всё хорошо. Но вдруг зависания, ошибки файловой системы, а то и внезапная перезагрузка. После ребута вы заходите в логи, а там — тишина. Ни ошибок, ни краш-дампов. Знакомая картина?

Часто виновник  перегрев. Процессор или диск нагреваются выше критической отметки, и срабатывает тепловая защита. Сервер вырубается, чтобы не сгореть дотла. Летом, в жару, это происходит чаще. Но как узнать температуру до того, как всё упадёт? Щупать радиатор рукой метод ненадёжный и опасный.

Нужны программные инструменты, которые покажут температуру процессора, чипсета, жёстких дисков и даже позволят настроить оповещения.

Решение

В Linux есть несколько простых утилит для контроля температуры:

  1. lm-sensors  для процессора, материнской платы, видеокарты.
  2. hddtemp или smartctl  для жёстких дисков (HDD и SSD).

Мы установим их, настроим, научимся читать показания и добавим простой скрипт для отправки предупреждений, если температура зашкаливает.

Пошаговая инструкция

Шаг 1. Процессор и система: lm-sensors

Это основной пакет для мониторинга температуры чипов.

Установка:

bash

# Debian/Ubuntu
sudo apt update && sudo apt install lm-sensors -y

# CentOS/RHEL
sudo yum install lm_sensors -y

# Fedora
sudo dnf install lm_sensors -y

# Arch Linux
sudo pacman -S lm_sensors

Первоначальная настройка (детектирование сенсоров):
После установки нужно просканировать систему на наличие доступных датчиков.

bash

sudo sensors-detect

Программа задаст несколько вопросов. Можно смело на все отвечать YES (или просто нажимать Enter, если предлагается выбор по умолчанию). В конце она предложит обновить конфигурационный файл соглашайтесь.

Просмотр температуры:
Теперь просто введите команду:

bash

sensors

Пример вывода (хороший сервер):

coretemp-isa-0000
Adapter: ISA adapter
Package id 0:  +45.0°C  (high = +80.0°C, crit = +100.0°C)
Core 0:        +44.0°C  (high = +80.0°C, crit = +100.0°C)
Core 1:        +45.0°C  (high = +80.0°C, crit = +100.0°C)
Core 2:        +42.0°C  (high = +80.0°C, crit = +100.0°C)
Core 3:        +43.0°C  (high = +80.0°C, crit = +100.0°C)

acpitz-acpi-0
Adapter: ACPI interface
temp1:        +27.8°C  (crit = +119.0°C)

Здесь мы видим:

  • Температуру каждого ядра процессора (45°C отлично).
  • Пороги срабатывания (high начало троттлинга, crit аварийное отключение).
  • Температуру чипсета или материнской платы (acpitz).

Пример вывода (перегретый сервер):

coretemp-isa-0000
Adapter: ISA adapter
Package id 0:  +97.0°C  (high = +80.0°C, crit = +100.0°C)
Core 0:        +97.0°C  (high = +80.0°C, crit = +100.0°C)
Core 1:        +96.0°C  (high = +80.0°C, crit = +100.0°C)

Температура 97°C это критично близко к порогу отключения (100°C). Сервер вот-вот вырубится. Срочно проверять кулеры и вентиляцию!

Шаг 2. Жёсткие диски: hddtemp

Диски тоже греются и выходят из строя. Особенно чувствительны HDD, но и у SSD есть рабочий диапазон.

Установка:

bash

# Debian/Ubuntu
sudo apt install hddtemp -y

# CentOS/RHEL (требуется EPEL)
sudo yum install epel-release -y
sudo yum install hddtemp -y

# Fedora
sudo dnf install hddtemp -y

Использование:
Просто укажите диск, который хотите проверить (обычно это /dev/sda/dev/nvme0n1 и т.д.):

bash

sudo hddtemp /dev/sda

Пример вывода:

text

/dev/sda: WDC WD40EFAX-68JH4N1: 38°C

Нормальная температура для HDD до 45-50°C. Выше уже плохо. Для SSD нормой считается до 60-70°C (но лучше держать ниже).

Альтернатива: smartctl (из пакета smartmontools)
smartctl умеет показывать не только температуру, но и кучу другой информации о состоянии диска (ошибки, время работы и т.д.).

Установка:

bash

sudo apt install smartmontools -y   # Debian/Ubuntu
sudo yum install smartmontools -y   # CentOS/RHEL

Просмотр температуры:

bash

sudo smartctl -A /dev/sda | grep -i temperature

Или одной командой для всех дисков:

bash

for disk in /dev/sd?; do sudo smartctl -A $disk | grep -i "Temperature_Celsius" | awk '{print $disk ": " $10"°C"}'; done

Пример вывода smartctl:

194 Temperature_Celsius     0x0022   100   100   000    Old_age   Always       -       41

Здесь 41°C текущая температура.

Шаг 3. Автоматизация: скрипт для проверки и оповещения

Вручную бегать и вводить sensors каждый день занятие для параноиков. Давайте сделаем простой скрипт, который будет проверять температуру раз в 10-15 минут и, если что-то нагрелось выше нормы, писать в лог или отправлять уведомление (например, в Telegram или на email).

Создадим скрипт /usr/local/bin/check_temp.sh:

bash

sudo nano /usr/local/bin/check_temp.sh

Вставим код:

bash

#!/bin/bash
# Скрипт проверки температуры процессора и дисков

# Пороги срабатывания (в градусах Цельсия)
CPU_WARN=75
CPU_CRIT=90
DISK_WARN=50
DISK_CRIT=60

LOG="/var/log/temp_check.log"
DATE=$(date "+%Y-%m-%d %H:%M:%S")

# Функция отправки уведомления (заглушка, сюда можно добавить Telegram/email)
send_alert() {
    echo "$DATE: ВНИМАНИЕ! $1" >> $LOG
    # Здесь можно добавить curl для отправки в Telegram
}

# Проверка CPU через sensors
CPU_TEMP=$(sensors | grep "Package id 0" | awk '{print $4}' | tr -d '+°C')
if [ ! -z "$CPU_TEMP" ]; then
    if (( $(echo "$CPU_TEMP > $CPU_CRIT" | bc -l) )); then
        send_alert "КРИТИЧЕСКАЯ температура CPU: ${CPU_TEMP}°C!"
    elif (( $(echo "$CPU_TEMP > $CPU_WARN" | bc -l) )); then
        send_alert "Предупреждение: температура CPU ${CPU_TEMP}°C"
    fi
fi

# Проверка дисков через hddtemp (для всех /dev/sd*)
for disk in /dev/sd?; do
    if [ -e "$disk" ]; then
        DISK_TEMP=$(sudo hddtemp $disk 2>/dev/null | awk '{print $NF}' | tr -d '°C')
        if [ ! -z "$DISK_TEMP" ]; then
            if (( $(echo "$DISK_TEMP > $DISK_CRIT" | bc -l) )); then
                send_alert "КРИТИЧЕСКАЯ температура диска $disk: ${DISK_TEMP}°C!"
            elif (( $(echo "$DISK_TEMP > $DISK_WARN" | bc -l) )); then
                send_alert "Предупреждение: температура диска $disk ${DISK_TEMP}°C"
            fi
        fi
    fi
done

echo "$DATE: Проверка завершена" >> $LOG

Делаем скрипт исполняемым:

bash

sudo chmod +x /usr/local/bin/check_temp.sh

Важно: скрипт использует bc для сравнения чисел с плавающей точкой. Если его нет, установите:

bash

sudo apt install bc -y        # Debian/Ubuntu
sudo yum install bc -y        # CentOS/RHEL

Шаг 4. Добавляем в cron

Запускаем проверку, например, каждые 15 минут:

bash

sudo crontab -e

Добавляем строку:

text

*/15 * * * * /usr/local/bin/check_temp.sh

Теперь система будет самостоятельно следить за перегревом и сообщать о проблемах.

Шаг 5. Что делать, если перегрев обнаружен?

  1. Проверить вентиляторы: крутятся ли? sensors может показывать и обороты (RPM).
  2. Очистить от пыли: забитые радиаторы — частая причина перегрева.
  3. Проверить термопасту: на старых серверах она могла высохнуть.
  4. Обеспечить вентиляцию: в серверной шкафу должно быть прохладно.
  5. Для дисков: если диск горячий, проверьте, стоит ли он рядом с другим горячим диском. Обеспечьте продув корзины.

Итог: шпаргалка по мониторингу температуры

КомпонентУтилитаКоманда для просмотраЧто считать нормой
Процессор (CPU)lm-sensorssensorsДо 60°C в покое, до 80°C под нагрузкой
Материнская платаlm-sensorssensors (ищите temp1, temp2)30–50°C
Жёсткий диск (HDD)hddtempsudo hddtemp /dev/sdaДо 45–50°C
Жёсткий диск (SSD)smartctlsudo smartctl -A /dev/sda | grep TempДо 60–70°C
Видеокарта (GPU)nvidia-smi (для NVIDIA)nvidia-smiЗависит от модели, обычно до 80–85°C

Заключение

Мониторинг температуры это не паранойя, а производственная необходимость. Один перегретый сервер в плохо вентилируемой стойке может испортить вам не только выходной, но и данные клиентов.

Установка lm-sensors и hddtemp занимает пять минут, а скрипт с уведомлениями спасёт от внезапных отказов. Не поленитесь настройте контроль температуры сегодня, чтобы завтра не пришлось объяснять начальнику, почему упал сайт.

Menu