Скрипт Bash для измерения температуры процессора и загрузки процессора и сохранения этих значений каждую секунду в файл

Мне нужно написать скрипт или код командной строки в 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
-1
задан 11 September 2019 в 20:28

1 ответ

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%

3
ответ дан 23 October 2019 в 02:23

Другие вопросы по тегам:

Похожие вопросы: