Salut,
J’ai un petit souci sur une boucle dans un script bash …
#!/bin/bash
cores="$(lscpu | grep -E 'Cœur|Coeur' | tr -s ' ' | tr -d ':' | sed 's/.* //')"
cores=$((cores-1))
cpus="$(lscpu | grep -E 'Socket|Support\(' | tr -s ' ' | sed 's/.* //')"
cpus=$((cpus-1))
sens="$(sensors | grep 'Core' | cut -d "(" -f 1 | cut -d "+" -f 2 | cut -c 1-4)"
echo "$sens"
echo "{"
echo "\"data\":["
comma=""
for cpu in $(seq 0 "$cpus")
do
for core in $(seq 0 "$cores")
do
for temp in $sens
do
echo " $comma{\"{#CPUID}\":\"$cpu\":\"{#COREID}\":\"$core\":\"{#TEMPID}\":\"$temp\"}"
comma=","
done
done
done
echo "]"
echo "}"
Techniquement la sortie devrait être du genre :
{
"data":[
{"{#CPUID}":"0":"{#COREID}":"0":"{#TEMPID}":""}
,{"{#CPUID}":"0":"{#COREID}":"1":"{#TEMPID}":""}
,{"{#CPUID}":"0":"{#COREID}":"2":"{#TEMPID}":""}
,{"{#CPUID}":"0":"{#COREID}":"3":"{#TEMPID}":""}
,{"{#CPUID}":"0":"{#COREID}":"4":"{#TEMPID}":""}
,{"{#CPUID}":"0":"{#COREID}":"5":"{#TEMPID}":""}
,{"{#CPUID}":"1":"{#COREID}":"0":"{#TEMPID}":""}
,{"{#CPUID}":"1":"{#COREID}":"1":"{#TEMPID}":""}
,{"{#CPUID}":"1":"{#COREID}":"2":"{#TEMPID}":""}
,{"{#CPUID}":"1":"{#COREID}":"3":"{#TEMPID}":""}
,{"{#CPUID}":"1":"{#COREID}":"4":"{#TEMPID}":""}
,{"{#CPUID}":"1":"{#COREID}":"5":"{#TEMPID}":""}
]
}
La boucle sur laquelle je butte actuellement me permet de récupérer les températures par cores de chaque de chaque CPU (dans le cas de multi cpu.
Ayant trouvé le moyen d’exploiter la température des cores et non simplement des CPU sur l’ensemble du matériel hétérogène je me suis donc résigné à gérer les sondes de cette manière (c’est overkill mais ça marchera au moins ).
LA première boucle me permet de récupérer le nombre de socket physique, la seconde me permet de lui attribuer selon le nombre de core un numéro pour l’identifier.
la troisième boucle devrait pouvoir normalement lire un résultat et lui attribué une valeur à chaque ligne pour chaque core.
Mais c’est la que le bas blesse, j’ai des erreurs sur chaques méthodes d’exploitations testé jusqu’alors
Je récupère une liste de la sorte avec ma variable $sens :
69.0
69.0
68.0
69.0
67.0
65.0
55.0
51.0
52.0
48.0
51.0
52.0
Et donc je pensé faire une extraction lié au numéro de core +1 (car cela commence par zéro) afin de pouvoir dynamiquement utilisé ce type de script quelques soit le nombre de socket physique ou de cores par CPU.
Bien entendu je ne suis pas arrêté au BASH si vous avez une solution de remplacement à proposé en Perl ou en Python, mais je pense que le BASH sera plus simple à gérer.