Aqui está o que eu fiz para registrar os tempos.
Pré-requisitos: lm-sensors dateutils gnuplot
( gnuplot
para visualização, não é necessário)
É possível instalar o acima usando o seguinte comando no terminal.
sudo apt install lm-sensors dateutils gnuplot
Chegando ao script principal:
#!/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="" #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=""
#----------------------------------------------------------------------
#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---------------------------------------------------------
O comando gnuplot
no final precisa de mais dois arquivos que estão seguindo.
: 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
arquivo : 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
Execução do script Salve, torne-o executável e execute-o como
./script_name $nd$nh$nm$ns m
n
é algum número, enquanto d = dias, h = horas, m = minutos, s = segundos
m
tamanho do passo de medição em segundos. A medição será feita após o intervalo de m
segundos
Exemplo de uso.
./log_script.sh 3d12h 30
(explicação: log por 3 dias 12 horas com medição a cada 30 segundos)
./log_script.sh 12m30s 10
./log_script.sh 45m 2
./log_script.sh 55s 1
{Pode ser usado com cron
para registros regulares. Eu uso este script somente quando benchmarking e / ou overclocking.}
Resultado
Esses scripts geram um arquivo de log como t_log.txt
, que tem a temperatura dos núcleos da CPU. (Para o sistema com diferentes núcleos, haverá uma pequena alteração. Edite a linha nos arquivos de script do gnuplot que são plot_time
e plot_day
especificamente, "t_log.txt" using last_column:column_for_each_core with lines title "core:6" linewidth 3
).
A saída em t_log.txt
parece com a seguinte,
(desde que esta é uma máquina de seis núcleos, portanto, 6 colunas de temps.)
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
E o enredo gerado parece com o seguinte:
O script pode gerar esses gráficos para logs muito longos ou muitos outros parâmetros. Também é possível plotar entre o logging, que precisa apenas de modificação do script. O script pode ser melhorado bastante e vários outros parâmetros, como uso de RAM, carga de CPU, atividade de HDD, podem ser adicionados. Aproveite!