Мне нужно написать скрипт или код командной строки в Ubuntu, которые берут температуру процессора и% загрузки процессора от lm_sensors или чего-то подобного. Эту информацию я хотел бы сохранить в файл .txt с датой и временем каждого измерения. Я пытался написать .sh файл, который ниже. Но это не работает так, как мне бы хотелось. Кто-нибудь может мне помочь?
while true;
do
echo $( date '+%H:%M:%S' ): $( sensors | grep 'CPU Temperature' | sed -r 's/^.*: +(.*) +[(].*$/\1/' ) >> temperature.txt;
echo $( date '+%H:%M:%S' ): $( top -b -n 1 | grep 'CPU:') >> cpu.txt;
sleep 1;
done
Sysfs является лучшим источником для парсинга атрибутов, выставленных подсистемами ядра.
echo "scale=1; $(sort -nr /sys/class/hwmon/hwmon1/{temp1_input,temp2_input,temp3_input} | head -n1) / 1000" | bc
Вывод:
38.0
загрузка ЦП Linux:
https://Вывод rosettacode.org/wiki/Linux_CPU_utilization#UNIX_Shell
#!/bin/bash
# by Paul Colby (http://colby.id.au), no rights reserved ;)
# Temperature inputs.
TEMP_INPUT=$(echo /sys/class/hwmon/hwmon1/{temp1_input,temp2_input,temp3_input})
PREV_TOTAL=0
PREV_IDLE=0
while true; do
# Get the total CPU statistics, discarding the 'cpu ' prefix.
CPU=(`sed -n 's/^cpu\s//p' /proc/stat`)
IDLE=${CPU[3]} # Just the idle CPU time.
# Calculate the total CPU time.
TOTAL=0
for VALUE in "${CPU[@]}"; do
let "TOTAL=$TOTAL+$VALUE"
done
# Calculate the CPU usage since we last checked.
let "DIFF_IDLE=$IDLE-$PREV_IDLE"
let "DIFF_TOTAL=$TOTAL-$PREV_TOTAL"
let "DIFF_USAGE=(1000*($DIFF_TOTAL-$DIFF_IDLE)/$DIFF_TOTAL+5)/10"
# Calculate highest CPU Temperature.
HIGH_TEMP=$(echo "scale=1; $(sort -r $TEMP_INPUT | head -n1) / 1000" | bc)
# Redirect CPU temperature and % of CPU usage to file.
echo "$(date '+%H:%M:%S'): +${HIGH_TEMP}°C ${DIFF_USAGE}%" >> cpu.txt
# Remember the total and idle CPU times for the next check.
PREV_TOTAL="$TOTAL"
PREV_IDLE="$IDLE"
# Wait before checking again.
sleep 1
done
cpu.txt:
12:02:27: +38.0В°C 6%