Onde posso encontrar o arquivo de log da temperatura do meu sistema?

6

Portanto, eu tenho o pacote lm-sensors instalado, e posso executar sensors e obter detalhes da temperatura do meu sistema, assim:

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)

O que eu gostaria de fazer é ver um registro (digamos, a cada 5 minutos) do que é a temperatura. Isso é possível?

    
por jrg 19.01.2012 / 23:28

1 resposta

5

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.

arquivo

: 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!

    
por ankit7540 17.12.2016 / 17:56