Hier ist, was ich getan habe, um Temps zu protokollieren.
Voraussetzungen: lm-sensors dateutils gnuplot
( gnuplot
zur Visualisierung nicht erforderlich)
Sie können das oben genannte mit dem folgenden Befehl im Terminal installieren.
sudo apt install lm-sensors dateutils gnuplot
Kommen wir zum Hauptskript:
#!/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---------------------------------------------------------
Der gnuplot
Befehl am Ende benötigt zwei weitere Dateien, die folgen.
Datei : 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
Datei: 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
Ausführen des Skripts
Speichern Sie es, machen Sie es ausführbar und führen Sie es aus als:
./script_name $nd$nh$nm$ns m
n
ist eine Zahl, während d = Tage, h = Stunden, m = Minuten, s = Sekunden
m
Schrittweite der Messung in Sekunden. Die Messung erfolgt nach m
Sekundenintervallen
Anwendungsbeispiel.
./log_script.sh 3d12h 30
(Erklärung: Protokoll für 3 Tage 12 Stunden mit Messung alle 30 Sekunden)
./log_script.sh 12m30s 10
./log_script.sh 45m 2
./log_script.sh 55s 1
{Es kann cron
für reguläre Protokolle verwendet werden. Ich verwende dieses Skript nur beim Benchmarking und / oder Übertakten.}
Ausgabe
Dieses Skript generiert eine Protokolldatei, t_log.txt
die die Temperatur der CPU-Kerne enthält. (Für System mit verschiedenen Kernen gibt es eine kleine Änderung sein. Bearbeiten Sie die Zeile in gnuplot Skript - Dateien , die sind plot_time
und plot_day
insbesondere "t_log.txt" using last_column:column_for_each_core with lines title "core:6" linewidth 3
).
Die Ausgabe in t_log.txt
sieht wie folgt aus (da dies eine Sechs-Kern-Maschine ist, also 6 Spalten mit 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
Und die erzeugte Handlung sieht wie folgt aus:
Das Skript kann solche Diagramme für sehr lange Protokolle oder viele andere Parameter generieren. Es ist auch möglich, zwischen den Protokollierungen zu zeichnen, für die lediglich eine Änderung des Skripts erforderlich ist. Das Skript kann erheblich verbessert und die Protokollierung mehrerer anderer Parameter wie RAM-Auslastung, CPU-Auslastung und Festplattenaktivität hinzugefügt werden. Genießen !