Итак, у меня установлен пакет lm-sensors
, и я могу запустить sensors
и получить подробную информацию о температуре моей системы, например:
acpitz-virtual-0
Adapter: Virtual device
temp1: +45.0°C (crit = +120.0°C)
k10temp-pci-00c3
Adapter: PCI adapter
temp1: +46.5°C (high = +70.0°C)
(crit = +115.0°C, hyst = +115.0°C)
Что я хотел бы сделать, так это возможность просматривать журнал (скажем, каждые 5 минут), что температура. Это возможно?
Вот то, что я сделал для входа временных файлов.
Предпосылки: lm-sensors dateutils gnuplot
(gnuplot
для визуализации, не необходимой)
Можно установить вышеупомянутое использование следующей команды в терминале.
sudo apt install lm-sensors dateutils gnuplot
Прибытие в основной сценарий:
#!/bin/bash
# Log temperature over some time interval given as days, hours, minutes or seconds.
# enter the variables according to your usage in the following seciton :
duration="$1" #duration format is ndnhnmns where n is some number and d is day,
# h is hours, m is minutes and s is seconds. For example, 4d , 4d5h30m , 5m30s, 6h30m30s are all valid.
step="$2"
#----------------------------------------------------------------------
#starting time taken as current
dt=$(date '+%Y-%m-%dT%H:%M:%S');
#et=$(date '+%Y-%m-%dT%H:%M:%S');
#----------------------------------------------------------------------
a=$(dateutils.dadd $dt $duration )
b=$(dateutils.ddiff $dt $a -f '%S')
echo $a $b
ntimes=$((b/step))
echo $ntimes
echo "logging...";
rm t_log.txt
nms=0
while [ $nms -lt $ntimes ]; do
sensors | grep -A 0 'Core' | cut -c18-21 |tr "\n" "\t" >> temp.txt
let nms=nms+1
sleep $step
now=$(date +"%m/%d/%Y %T")
# echo $now
echo -e "$(cat temp.txt)""\t$now" >> t_log.txt
rm temp.txt
done
#plotting using gnuplot to get a beautiful plot.
day=86400 #different x-axis for different time duration. A day = 86400 seconds
fcode=$(date "+%Y-%m-%d_%H%M%S") # generate a time stamp
#echo $fcode
if [[ "$b" > "$day" ]]
then
gnuplot -e "filename='temp_plot_$fcode'" plot_day
else
gnuplot -e "filename='temp_plot_$fcode'" plot_time
fi
#end-of-script---------------------------------------------------------
gnuplot
для команды в конце нужны еще два файла, которые следуют.
файл: plot_day
set terminal pngcairo size 1200,600 enhanced font 'Verdana'
set output sprintf('%s.png', filename)
set timefmt '%d/%m/%Y %H:%M:%S'
set xdata time
set format x '%m/%d'
set grid ytics lc rgb "#bbbbbb" lw 2 lt 1
set yr [20:100]
set title "Temperature log"
set xlabel "Date (month:day)"
set ylabel "degree Celcius"
plot "t_log.txt" using 7:1 with lines title "core:1" linewidth 3,\
"t_log.txt" using 7:2 with lines title "core:2" linewidth 3 ,\
"t_log.txt" using 7:3 with lines title "core:3" linewidth 3 ,\
"t_log.txt" using 7:4 with lines title "core:4" linewidth 3 ,\
"t_log.txt" using 7:5 with lines title "core:5" linewidth 3 ,\
"t_log.txt" using 7:6 with lines title "core:6" linewidth 3
replot
файл: plot_time
set terminal pngcairo size 1200,600 enhanced font 'Verdana'
set output sprintf('%s.png', filename)
set timefmt '%d/%m/%Y %H:%M:%S'
set xdata time
set format x '%H:%M:%S'
set grid ytics lc rgb "#bbbbbb" lw 2 lt 1
set yr [20:100]
set title "Temperature log"
set xlabel "Time (Hour:Minute:Second) "
set ylabel "degree Celcius"
plot "t_log.txt" using 7:1 with lines title "core:1" linewidth 3,\
"t_log.txt" using 7:2 with lines title "core:2" linewidth 3 ,\
"t_log.txt" using 7:3 with lines title "core:3" linewidth 3 ,\
"t_log.txt" using 7:4 with lines title "core:4" linewidth 3 ,\
"t_log.txt" using 7:5 with lines title "core:5" linewidth 3 ,\
"t_log.txt" using 7:6 with lines title "core:6" linewidth 3
replot
Запущение скрипта Сохраняет его, делает его исполняемым файлом и выполняет его как,
./script_name $nd$nh$nm$ns m
n
некоторое число, в то время как d=days, h=hours, m=minutes, s=seconds
m
размер шага измерения в секундах. Измерения будут проведены после интервала m
секунды
Пример использования.
./log_script.sh 3d12h 30
(объяснение: журнал в течение 3 дней 12 часов с измерением в каждом 30 секунд)
./log_script.sh 12m30s 10
./log_script.sh 45m 2
./log_script.sh 55s 1
{Это может использоваться с cron
для регулярных журналов. Я использую этот сценарий только при сравнительном тестировании и/или разгоне.}
Вывод
Это пишет сценарий, генерирует файл журнала как t_log.txt
который имеет температуру ядер процессора. (Для системы с различными ядрами будет небольшое изменение. Отредактируйте строку в gnuplot файлах сценария, которые являются plot_time
и plot_day
а именно, "t_log.txt" using last_column:column_for_each_core with lines title "core:6" linewidth 3
).
Вывод в t_log.txt
похож на следующее, (так как это - шесть базовых машин следовательно 6 столбцов временных файлов.)
28.0 28.0 27.0 27.0 27.0 27.0 12/18/2016 00:50:21
28.0 26.0 27.0 26.0 27.0 27.0 12/18/2016 00:50:23
27.0 27.0 26.0 26.0 27.0 26.0 12/18/2016 00:50:25
28.0 27.0 29.0 26.0 27.0 26.0 12/18/2016 00:50:27
26.0 27.0 26.0 28.0 27.0 26.0 12/18/2016 00:50:29
27.0 26.0 28.0 26.0 27.0 26.0 12/18/2016 00:50:31
27.0 26.0 26.0 26.0 27.0 26.0 12/18/2016 00:50:33
27.0 27.0 28.0 28.0 27.0 27.0 12/18/2016 00:50:35
И сгенерированный график похож на следующее:
Сценарий может генерировать такие графики для очень длинных журналов или многих других параметров. Также возможно вывести на печать промежуточный вход, для которого просто нужна модификация сценария. Сценарий может быть улучшен много и журналирование нескольких других параметров как Использование оперативной памяти, загрузка ЦП, действие жесткого диска может быть добавлено. Наслаждайтесь!