Usando o comando awk ou cut para obter a porcentagem da CPU

0

Estou tentando executar um comando do Linux por meio de um script PHP para obter a porcentagem de CPU de cada núcleo:

… com cut :

 $output = null;
 passthru("mpstat -P ALL | grep 0 | tr -s ' ' | cut -d ' ' -f 4", $output);
 echo "$output <br>";

… com awk :

$output = null;
passthru("mpstat -P ALL | grep 0 | tr -s ' ' | awk '{print $4}'", $output);
echo "$output <br>";

com as duas declarações, a saída é:

the name of my server 2.19 2.21 2.30 2.26 2.22 2.20 2.14 2.09 2.07 0

Meu servidor tem uma CPU de 8 núcleos e eu quero usar a saída diretamente para os gráficos do Google, então eu preciso apenas da porcentagem de CPU para 8 núcleos, sem o nome do servidor.

Pode me ajudar com esse problema?

    
por Mohammed AL Jakry 23.05.2013 / 18:04

1 resposta

1

Estou ecoando a string porque o mpstat do meu sistema é diferente do que você mostra na sua pergunta, mas deve funcionar se a saída for o que você postou.

<?
$string="the name of my server 2.19 2.21 2.30 2.26 2.22 2.20 2.14 2.09 2.07 0";
$output=system("echo $string | perl -ne '/^.+?\s+([\d\. ]+)/; print \"$1\"'");
echo "$output <br>";
?>

O script Perl está apenas procurando pelo maior número de dígitos, pontos decimais e espaços ( [\d\. ]+ ) e imprimindo-o, que deve separar nomes de servidores dos dados com nomes de servidor arbitrários. Ele falhará se o nome do seu servidor terminar com um número, algo como foo bar 12 . Ele não tratará o 12 como parte do nome do servidor, mas como parte dos dados.

Se os nomes dos seus servidores nunca contiverem espaços (o que suponho que eles não possuam), você pode usar esta gawk versão, se preferir:

<?
$string="thenameofmyserver 2.19 2.21 2.30 2.26 2.22 2.20 2.14 2.09 2.07 0";
$output=system("echo $string | gawk '{for(i=2; i<=NF; i++){printf \"%s \",$(i)}}'");
echo "$output <br>";
?>
    
por 24.05.2013 / 05:07

Tags