Skip to content
Advertisement

Script in ubuntu to take CPU temperature and CPU usage in the same time and save to file [closed]

I need to write script or command line code in Ubuntu which take CPU temperature and % of CPU usage from lm_sensors or something similar and this information I would like to save in .txt file with date and time of each measurement. I tried to write .sh file which is below, temperature works but CPU usage doesn’t work correctly it only save first measurement everytime. Can somebody help me?

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

Advertisement

Answer

You can calculate the CPU usage as such, but only over time. The cpu usage isn’t stored in a file, you have to calculate it yourself:

cat <(grep 'cpu ' /proc/stat) <(sleep 1 && grep 'cpu ' /proc/stat) | awk -v RS="" '{print ($13-$2+$15-$4)*100/($13-$2+$15-$4+$16-$5) "%"}'

If you have a cpu temperature sensor, it’s located in /sys/class/hwmon. You need to figure out yourself which one is correct, since that’s driver dependent. Mine is “coretemp”, I guess.

$ cat /sys/class/hwmon/hwmon*/name
acpitz
dell_smm
coretemp
nouveau

Once you found out the above, you can do the following:

#! /bin/bash

LOG=cpu.log
while true; do
    percentage=$(cat <(grep 'cpu ' /proc/stat) <(sleep 1 && grep 'cpu ' /proc/stat) | awk -v RS="" '{print ($13-$2+$15-$4)*100/($13-$2+$15-$4+$16-$5) "%"}')
    echo -n "$(date "+%F-%T") " >> ${LOG}
    echo -n "$percentage " >> ${LOG}
    cat /sys/class/hwmon/hwmon2/temp1_input >> ${LOG}
done
exit 0
``

[1] [Getting cpu usage same every time.](https://unix.stackexchange.com/questions/69185/getting-cpu-usage-same-every-time)
User contributions licensed under: CC BY-SA
5 People found this is helpful
Advertisement