LINUX.ORG.RU

Протестируйте, пожалуйста, скрипт на FreeBSD

 , , ,


1

2

Шалом.

Ежели у вас FreeBSD, проверьте, пожалуйста, скрипт. Если работать не будет, скиньте, пожалуйста, sysctl hw.acpi.thermal в комментариях. Заранее благодарю.

#!/bin/sh

cpu_temp_delay="5"
cpu_temp_sysctl_cmd="sysctl -n"
cpu_temp_thermal_dev="tz0"
cpu_temp_value_dec="20"

cpu_temp_char="▊"

cpu_temp_mib_current="${cpu_temp_sysctl_cmd} \
hw.acpi.thermal.${cpu_temp_thermal_dev}.temperature | cut -d, -f1"

cpu_temp_mib_max="${cpu_temp_sysctl_cmd} \
hw.acpi.thermal.${cpu_temp_thermal_dev}._CRT | cut -d, -f1"

cpu_temp_value_max="$(eval ${cpu_temp_mib_max})"

cpu_temp_level1="$((${cpu_temp_value_max}/2))"
cpu_temp_level2="$((${cpu_temp_value_max}/4+${cpu_temp_level1}))"

color_red="\033[1;31m"
color_green="\033[1;32m"
color_yellow="\033[1;33m"
color_off="\033[m"

while : ; do
    cpu_temp_value_current="$(eval ${cpu_temp_mib_current})"
    cpu_temp_value_count="$((0 + ${cpu_temp_value_dec}))"
    printf "${cpu_temp_value_current}°C "
    until [ "$cpu_temp_value_count" -eq "$cpu_temp_value_current" ] ; do
        cpu_temp_value_count="$(($cpu_temp_value_count + 1))"
        if [ "$cpu_temp_value_count" -le "${cpu_temp_level1}" ] ; then
    	    printf "${color_green}${cpu_temp_char}${color_off}"
	elif [ "$cpu_temp_value_count" -ge "$((${cpu_temp_level1} + 1))" \
				-a "$cpu_temp_value_count" -le "${cpu_temp_level2}" ] ; then
    	    printf "${color_yellow}${cpu_temp_char}${color_off}"
    	elif  [ "$cpu_temp_value_count" -ge "$((${cpu_temp_level1} + 1))" ] ; then
    	    printf "${color_red}${cpu_temp_char}${color_off}"
    	fi
    done
    printf "\n"
    sleep ${cpu_temp_delay}
done

★★★★★

Работает:

27°C ▊▊▊▊▊▊▊
27°C ▊▊▊▊▊▊▊
27°C ▊▊▊▊▊▊▊
27°C ▊▊▊▊▊▊▊

$ sysctl hw.acpi.thermal:

hw.acpi.thermal.tz0._TSP: -1
hw.acpi.thermal.tz0._TC2: -1
hw.acpi.thermal.tz0._TC1: -1
hw.acpi.thermal.tz0._ACx: 71,1C 55,1C 50,1C 45,1C 40,1C -1 -1 -1 -1 -1
hw.acpi.thermal.tz0._CRT: 119,1C
hw.acpi.thermal.tz0._HOT: -1
hw.acpi.thermal.tz0._PSV: -1
hw.acpi.thermal.tz0.thermal_flags: 0
hw.acpi.thermal.tz0.passive_cooling: 0
hw.acpi.thermal.tz0.active: -1
hw.acpi.thermal.tz0.temperature: 27,9C
hw.acpi.thermal.user_override: 0
hw.acpi.thermal.polling_rate: 10
hw.acpi.thermal.min_runtime: 0

iron ★★★★★
()
Ответ на: комментарий от matawe6067

Так вот как TrueOS пилят.

Ой, да кому она нужно. Сейчас всё через pkg install + десять минут в ee настраивается.

IPR ★★★★★
() автор топика
Ответ на: комментарий от iron

Спасибо. Интересно, на АМД такой же выхлоп как и на Интеле? У меня только интел в наличии :/

IPR ★★★★★
() автор топика
Ответ на: комментарий от IPR

У меня только интел в наличии :/

У меня тоже. И на всех серваках только интел. Так что протестить негде.

iron ★★★★★
()
Ответ на: комментарий от iron

У меня тоже. И на всех серваках только интел. Так что протестить негде.

Тогда doas cast iZEN :)

IPR ★★★★★
() автор топика

# sysctl hw.acpi.thermal

sysctl: unknown oid 'hw.acpi.thermal'

# kldload coretemp

# sysctl dev.cpu|grep temperature|awk 'NR==1 {max=$2; min=$2; sum=0;} { if($2>max) max=$2; if($2<min) min=$2; sum+=$2; } END { printf «min: %d, max: %d, avg: %.2f\n», min,max,sum/NR}'

min: 64.0C, max: 79.0C, avg: 72.04

FELiX
()

Работает

61°C ▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊
61°C ▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊
60°C ▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊
60°C ▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊

Выхлоп sysctl

hw.acpi.thermal.tz0._TSP: 30
hw.acpi.thermal.tz0._TC2: 10
hw.acpi.thermal.tz0._TC1: 2
hw.acpi.thermal.tz0._ACx: -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
hw.acpi.thermal.tz0._CRT: 95,1C
hw.acpi.thermal.tz0._HOT: -1
hw.acpi.thermal.tz0._PSV: 120,1C
hw.acpi.thermal.tz0.thermal_flags: 0
hw.acpi.thermal.tz0.passive_cooling: 1
hw.acpi.thermal.tz0.active: -1
hw.acpi.thermal.tz0.temperature: 60,1C
hw.acpi.thermal.user_override: 0
hw.acpi.thermal.polling_rate: 10
hw.acpi.thermal.min_runtime: 0

Проц

CPU: AMD E-350 Processor (1600.06-MHz K8-class CPU)

Единственно, при LANG= и LC_xxx=«C» вываливается ошибка arithmetic expression: expecting EOF: «95.1C/2»

araks ★★
()
Ответ на: комментарий от araks

Понял, спасибо, это tr не отрабатывает.

IPR ★★★★★
() автор топика

там я так понял, либо точка, либо запятая десятичная, в зависимости от локали

> env | grep LC_ALL
LC_ALL=en_GB.UTF-8
ross@coffin /home/ross pts/3> sh t.sh
t.sh: arithmetic expression: expecting EOF: "119.1C/2"
ross@coffin /home/ross pts/3> env LC_ALL=ru_RU.UTF-8 sh t.sh
27°C ▊▊▊▊▊▊▊
27°C ▊▊▊▊▊▊▊
27°C ▊▊▊▊▊▊▊
27°C ▊▊▊▊▊▊▊
hw.acpi.thermal.tz1._TSP: -1
hw.acpi.thermal.tz1._TC2: -1
hw.acpi.thermal.tz1._TC1: -1
hw.acpi.thermal.tz1._ACx: -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
hw.acpi.thermal.tz1._CRT: 119.1C
hw.acpi.thermal.tz1._HOT: -1
hw.acpi.thermal.tz1._PSV: -1
hw.acpi.thermal.tz1.thermal_flags: 0
hw.acpi.thermal.tz1.passive_cooling: 0
hw.acpi.thermal.tz1.active: -1
hw.acpi.thermal.tz1.temperature: 29.9C
hw.acpi.thermal.tz0._TSP: -1
hw.acpi.thermal.tz0._TC2: -1
hw.acpi.thermal.tz0._TC1: -1
hw.acpi.thermal.tz0._ACx: 71.1C 55.1C 50.1C 45.1C 40.1C -1 -1 -1 -1 -1
hw.acpi.thermal.tz0._CRT: 119.1C
hw.acpi.thermal.tz0._HOT: -1
hw.acpi.thermal.tz0._PSV: -1
hw.acpi.thermal.tz0.thermal_flags: 0
hw.acpi.thermal.tz0.passive_cooling: 0
hw.acpi.thermal.tz0.active: -1
hw.acpi.thermal.tz0.temperature: 27.9C
hw.acpi.thermal.user_override: 0
hw.acpi.thermal.polling_rate: 10
hw.acpi.thermal.min_runtime: 0

i5-9400f на asus prime b365m-k

moot ★★★★
()
Ответ на: комментарий от IPR
 sysctl -n hw.acpi.thermal.tz0.temperature|awk '{print $1+0}'  
51,1

sysctl -n hw.acpi.thermal.tz0.temperature|awk '{print int($1+0)}'
51
anonymous
()

Смысл, извращаться с вычислениями на шелле?

#!/bin/sh
sleep_time=5;
cmd="sysctl -n"
dev="hw.acpi.thermal.tz0"

$cmd $dev"._CRT"
while : ; do
    $cmd $dev".temperature"
    sleep $sleep_time
done
#!/usr/bin/awk -f
BEGIN { 
    start_t = 20;
    char = "█" #"▊";
    getline;
    max_t = $1 + 0;
    level1_t = max_t/2;
    level2_t = max_t/4 + level1_t;

    red="\033[1;31m"
    green="\033[1;32m"
    yellow="\033[1;33m"
    color_off="\033[m"
}

{
    cur_t = $1
    printf("%d°C ",cur_t);
    for (i = start_t; i < cur_t; i++) {
        
        if ( (i >= level1_t) && (i <= level2_t) ) {
            color = yellow;
        } else if (i > level2_t) {
            color = red;        
        } else {
            color = green;
        }
        printf(color char);
    } 
        print color_off ;
}

Ну или целиком на awk:

#!/usr/bin/awk -f
function read_sysctl(cmd) {
    cmd | getline res;
    close(cmd);
    return res + 0.0;
}

BEGIN { 
    start_t = 20;
    char = "▊";
    sleep = "sleep 2" ;
    dev = "hw.acpi.thermal.tz0";
    sysctl = "sysctl -n " dev;

    max_t = read_sysctl(sysctl "._CRT");
    level1_t = max_t/2;
    level2_t = max_t/4 + level1_t
    
    red="\033[1;31m"
    green="\033[1;32m"
    yellow="\033[1;33m"
    color_off="\033[m"
    
    cmd = sysctl ".temperature"
     
    while (cur_t = read_sysctl(cmd)) {
        printf("%d°C ",cur_t);
        for (i = start_t; i < cur_t; i++) {
        
            if ( (i >= level1_t) && (i <= level2_t) ) {
                color = yellow;
            } else if (i > level2_t) {
                color = red;        
            } else {
                color = green;
            }
            printf(color char);
    } 
        print color_off ;
        if(system(sleep) > 0) { exit };
    }    
}
anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.