Voici ce que j'ai fait pour enregistrer les températures.
Prérequis : lm-sensors dateutils gnuplot
(gnuplot
pour la visualisation, pas nécessaire)
On peut installer ce qui précède en utilisant la commande suivante dans le terminal.
sudo apt install lm-sensors dateutils gnuplot
Passons au script principal :
#!/bin/bash
# Enregistrer la température sur une certaine période de temps donnée en jours, heures, minutes ou secondes.
# entrer les variables selon votre utilisation dans la section suivante :
durée="$1" #format de durée est ndnhnmns où n est un nombre et d est jour,
# h est heures, m est minutes et s est secondes. Par exemple, 4d , 4d5h30m , 5m30s, 6h30m30s sont toutes valides.
pas="$2"
#----------------------------------------------------------------------
#temps de départ pris comme actuel
dt=$(date '+%Y-%m-%dT%H:%M:%S');
#et=$(date '+%Y-%m-%dT%H:%M:%S');
#----------------------------------------------------------------------
a=$(dateutils.dadd $dt $durée )
b=$(dateutils.ddiff $dt $a -f '%S')
echo $a $b
ntemps=$((b/pas))
echo $ntemps
echo "enregistrement...";
rm t_log.txt
nms=0
while [ $nms -lt $ntemps ]; do
sensors | grep -A 0 'Core' | cut -c18-21 |tr "\n" "\t" >> temp.txt
let nms=nms+1
sleep $pas
now=$(date +"%m/%d/%Y %T")
# echo $now
echo -e "$(cat temp.txt)""\t$now" >> t_log.txt
rm temp.txt
done
#tracé en utilisant gnuplot pour obtenir un joli graphique.
jour=86400 #axe des x différent pour différentes durées. Un jour = 86400 secondes
fcode=$(date "+%Y-%m-%d_%H%M%S") # générer un horodatage
#echo $fcode
if [[ "$b" > "$jour" ]]
then
gnuplot -e "filename='temp_plot_$fcode'" plot_day
else
gnuplot -e "filename='temp_plot_$fcode'" plot_time
fi
#fin-du-script---------------------------------------------------------
La commande gnuplot
à la fin nécessite deux fichiers supplémentaires, les voici.
fichier : 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 "Journal de température"
set xlabel "Date (mois:jour)"
set ylabel "degré Celsius"
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
fichier : 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 "Journal de température"
set xlabel "Temps (Heure:Minute:Seconde) "
set ylabel "degré Celsius"
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
Exécution du script Enregistrez-le, rendez-le exécutable et exécutez-le comme suit,
./script_name $nd$nh$nm$ns m
n
est un nombre quelconque, tandis que d=jours, h=heures, m=minutes, s=secondes
m
taille du pas de mesure en secondes. La mesure sera prise après un intervalle de m
secondes
Exemple d'utilisation.
./log_script.sh 3d12h 30
(explication : journal pour 3 jours 12 heures avec une mesure toutes les 30 secondes)
./log_script.sh 12m30s 10
./log_script.sh 45m 2
./log_script.sh 55s 1
{Il peut être utilisé avec cron
pour des journaux réguliers. J'utilise ce script uniquement lors de tests de performances et/ou d'overclocking.}
Sortie
Ce script génère un fichier journal sous le nom t_log.txt
qui contient la température des cœurs du CPU. (Pour un système avec des cœurs différents, il y aura une petite différence. Modifiez la ligne dans les fichiers script gnuplot qui sont plot_time
et plot_day
spécifiquement, "t_log.txt" using derniere_colonne:colonne_pour_chaque_coeur with lines title "core:6" linewidth 3
).
La sortie dans t_log.txt
ressemble à ce qui suit, (puisque c'est une machine à six coeurs, il y a donc 6 colonnes de températures.)
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
Et le graphique généré ressemble à ce qui suit :
Le script peut générer de tels graphiques pour des journaux très longs ou de nombreux autres paramètres. Il est également possible de tracer entre les enregistrements, ce qui nécessite simplement une modification du script. Le script peut être grandement amélioré et l'enregistrement de plusieurs autres paramètres tels que l'utilisation de la RAM, la charge du CPU, l'activité du disque dur peut être ajouté. Profitez-en !