
Предисловие
Для Windows имеется немало программ, в том числе и бесплатных, для просмотра температуры ЦП, накопителя, а также для записи в файл: SpeedFan, Crystal Disk Info (2), Libre Hardware Monitor, HWMonitor, HWiNFO и тому подобные.
Для Linux также имеются похожие программы (Psensor (использует hddtemp, libatasmart, udisks2 (в моём случае udisks2), lm-sensors, XNVCtrl, ATI ADL SDK), gkrellm, inxi, но было интересно самому написать сценарий для записи температуры в текстовый файл.
Используется ноутбук ACER Extensa, ОС: LMDE6.
Сценарий №1
Требуется: температура ЦП, температура накопителя, запись данных в .txt.
Температура ЦП определяется посредством sensors (в LMDE6 утилита предустановлена):

Отсюда требуется лишь температура ядер:

С извлечением данных о температуре диска было сложнее. Можно использовать smartctl:
sudo smartctl -a /dev/sda | grep "Temperature" [sudo] пароль: 194 Temperature_Celsius 0x0022 100 100 000 Old_age Always - 32 (Min/Max 20/45)
Не смог найти утилиты без использования sudo.
Был вариант:

Должен (вроде как) отображаться "drivetemp" ( grep -l "drivetemp" /sys/class/hwmon/hwmon*/name ), но нет.
Либо:

Нет нужной мне информации.
Из udisksctl не нашёл как извлечь температуру.
Утилиты hddtemp нет в репозиториях LMDE6. На github: hddtemp-master.zip 6,8 KB.
Извлечь и поместить 'hddtemp-lt' в папку '/usr/local/bin/' (требуются права root).
sudo hddtemp-lt [sudo] пароль: /dev/sda TOSHIBA MQ01ABD100 32 /dev/sdb NA NA /dev/sdc NA NA
Примечание. Определяет только внутренний накопитель, внешние — нет.
sudo -S hddtemp-lt --classic /dev/sd* | grep "TOSHIBA" /dev/sda: TOSHIBA MQ01ABD100: 32°C
Примечание. Использовал маску /dev/sd*, поскольку при подключении внешних дисков до запуска системы внутренний накопитель может назначаться как /dev/sdb, а не как /dev/sda.
Итоговый сценарий (№1):
#!/bin/bash # Сценарий записи температуры ядер центрального процессора посредством sensors и внутреннего накопителя посредством hddtemp-lt # Объявление переменных: пути к файлам. tmp_log="$HOME/Log/temper-log" if [ ! -d "$HOME/Log" ] then mkdir $HOME/Log fi # Функция Temperature: запись температуры ядер центрального процессора (sensors) и внутреннего накопителя посредством (hddtemp-lt) (запись в файл каждые три минуты). function Temperature () { echo -e "\n\t\t$(date '+%F') $(uptime)" >> $tmp_log sensors | grep 'Core' | cut -c -23 >> $tmp_log printf "пароль" | sudo -S hddtemp-lt --classic /dev/sd* | grep "TOSHIBA" >> $tmp_log } while : do Temperature sleep 180 done
Примечание. 1. Не самая хорошая идея втыкать пароль прямо в сценарий, но для домашнего использования сойдёт. 2. Пришлось слепить функцию, поскольку не смог сделать всё из одних if’ов.
Сценарий №2
Текущие температуры не особо интересны, если они не критические. Поэтому вариант №2 — запись в файл температур, превышающих заданные пределы. ЦП в используемом ноутбуке достаточно холодный, как и HDD TOSHIBA, поэтому для ЦП выставил предел в +65°C, для диска — в +39°C.
#!/bin/bash # Сценарий записи критических температур ядер центрального процессора посредством sensors и внутреннего накопителя посредством hddtemp-lt # Объявление переменных: пути к файлам. warning_log="$HOME/Log/warning_log" if [ ! -d "$HOME/Log" ] then mkdir $HOME/Log fi # Функция HDD_Temperature_Warning: запись критической температуры внутреннего накопителя. # Объявление локальных переменных: критическая температура накопителя. function HDD_Temperature_Warning () { local hdd_temp_fact="$(printf "пароль" | sudo -S hddtemp-lt --classic /dev/sd* | grep "TOSHIBA" | cut -c 11-35)" local hdd_temp_max="TOSHIBA MQ01ABD100: 39°C" if [ "$hdd_temp_fact" \> "$hdd_temp_max" ] then echo -e "$(date '+%F %T') $hdd_temp_fact" >> $warning_log fi } # Функция CPU_Temperature_Warning: запись критической температуры ядер центрального процессора. # Объявление локальных переменных: критические температуры ядер центрального процессора. function CPU_Temperature_Warning () { local cpu_temp_fact_0="$(sensors | grep 'Core 0' | cut -c -23 )" local cpu_temp_max_0="Core 0: +65.0°C " local cpu_temp_fact_2="$(sensors | grep 'Core 2' | cut -c -23 )" local cpu_temp_max_2="Core 2: +65.0°C " if [ "$cpu_temp_fact_0" \> "$cpu_temp_max_0" ] then echo -e "$(date '+%F %T') $cpu_temp_fact_0" >> $warning_log fi if [ "$cpu_temp_fact_2" \> "$cpu_temp_max_2" ] then echo -e "$(date '+%F %T') $cpu_temp_fact_2" >> $warning_log fi } # Цикл записи в temper_warning-log. while : do HDD_Temperature_Warning CPU_Temperature_Warning sleep 60 done
Раз в минуту проверяется температура, если значение равно или выше заданного, пишется в файл.
