Проблема
Сервер работает, всё хорошо. Но вдруг зависания, ошибки файловой системы, а то и внезапная перезагрузка. После ребута вы заходите в логи, а там — тишина. Ни ошибок, ни краш-дампов. Знакомая картина?
Часто виновник перегрев. Процессор или диск нагреваются выше критической отметки, и срабатывает тепловая защита. Сервер вырубается, чтобы не сгореть дотла. Летом, в жару, это происходит чаще. Но как узнать температуру до того, как всё упадёт? Щупать радиатор рукой метод ненадёжный и опасный.
Нужны программные инструменты, которые покажут температуру процессора, чипсета, жёстких дисков и даже позволят настроить оповещения.
Решение
В Linux есть несколько простых утилит для контроля температуры:
- lm-sensors для процессора, материнской платы, видеокарты.
- 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. Что делать, если перегрев обнаружен?
-
Проверить вентиляторы: крутятся ли?
sensorsможет показывать и обороты (RPM). - Очистить от пыли: забитые радиаторы — частая причина перегрева.
- Проверить термопасту: на старых серверах она могла высохнуть.
- Обеспечить вентиляцию: в серверной шкафу должно быть прохладно.
- Для дисков: если диск горячий, проверьте, стоит ли он рядом с другим горячим диском. Обеспечьте продув корзины.
Итог: шпаргалка по мониторингу температуры
| Компонент | Утилита | Команда для просмотра | Что считать нормой |
|---|---|---|---|
| Процессор (CPU) | lm-sensors | sensors | До 60°C в покое, до 80°C под нагрузкой |
| Материнская плата | lm-sensors | sensors (ищите temp1, temp2) | 30–50°C |
| Жёсткий диск (HDD) | hddtemp | sudo hddtemp /dev/sda | До 45–50°C |
| Жёсткий диск (SSD) | smartctl | sudo smartctl -A /dev/sda | grep Temp | До 60–70°C |
| Видеокарта (GPU) | nvidia-smi (для NVIDIA) | nvidia-smi | Зависит от модели, обычно до 80–85°C |
Заключение
Мониторинг температуры это не паранойя, а производственная необходимость. Один перегретый сервер в плохо вентилируемой стойке может испортить вам не только выходной, но и данные клиентов.
Установка lm-sensors и hddtemp занимает пять минут, а скрипт с уведомлениями спасёт от внезапных отказов. Не поленитесь настройте контроль температуры сегодня, чтобы завтра не пришлось объяснять начальнику, почему упал сайт.







