Pour une idée de la charge moyenne du processeur, j’utilise la uptime
dans un script ksh
:
uptime | awk '{print $11}' | sed '$s/.$//' | read CPU
où j’utilise ensuite la variable CPU
plus tard.
La partie à $11
sert à isoler les cinq dernières minutes . Mais, j’ai remarqué aujourd’hui que cela ne fonctionnait pas. Plus précisément, la partie des cinq dernières minutes a été retournée avec $9
. La fonction renvoie moins de parameters. Cela est dû au fait que la machine a été récemment redémarrée et que le uptime
affiche le nombre de minutes écastings depuis le redémarrage au lieu des jours et des minutes.
Y a-t-il un moyen de ne recevoir que les cinq dernières minutes du temps de disponibilité?
Essayez de séparer le texte avant “Load Average”, puis utilisez awk
sur la partie restante.
uptime | sed 's/.*load average: //' | awk -F\, '{print $2}'
cut -d ' ' -f2 /proc/loadavg
/ proc / loadvg est la source de données pour la disponibilité, w, qui et d’autres. Il a un format plus simple et les nombres ont toujours un point avant la partie décimale (la disponibilité et les parameters régionaux actuels, vous pouvez donc trouver quelque chose comme
charge moyenne: 0,18, 0,26, 0,30
qui sont plus difficiles à parsingr
de plus, le facteur est incroyablement bas! 😉
Il serait peut-être plus simple de lire le deuxième au dernier champ plutôt que le 9 ou le 11:
uptime | awk '{print $(NF-1)}' FS=,
Cette petite fonction shell devrait fonctionner avec bash ou ksh (93)
function loadavg { typeset minutes=$1 t1=$(uptime) echo ${t1#*load average: } | ( IFS=', ' && read L1 L5 L15 case $minutes in (1) echo $L1;; (5) echo $L5;; (15) echo $L15;; ("") echo $L1 $L5 $L15;; (*) echo "usage: loadavg [ 1 | 5 | 15 ]" 1>& 2 esac ) }
Explication:
Ce code utilise IFS pour diviser la chaîne après “load average:” en trois champs. ‘typeetet’ et le sous-shell isolent les variables de fonction des autres variables du shell.
Ce qui suit simplifie le résultat et renvoie simplement la réponse à la question d’origine:
function load5 { typeset t1=$(uptime) echo ${t1#*load average: } | ( IFS=', ' && read L1 L5 L15 echo $L5 ) }
Cela pourrait vous donner le meilleur résultat que je l’utilise pour obtenir ma moyenne de charge toutes les 5 minutes:
$ uptime | awk ‘{print $ 11}’ | tr -d ‘,’
Donc, j’avais du mal à en écrire un qui fonctionnait à la fois sous Linux et Mac OS X. Après beaucoup de combats, je suis arrivé à ceci:
uptime | sed 's/.*load average[s]*://' | awk '{print $3}'
J’espère que cela est utile pour quelqu’un.