Estoy tratando de ejecutar un comando de Linux a través de un script PHP para obtener el porcentaje de CPU para cada núcleo:
... con cut
:
$output = null;
passthru("mpstat -P ALL | grep 0 | tr -s ' ' | cut -d ' ' -f 4", $output);
echo "$output <br>";
... con awk
:
$output = null;
passthru("mpstat -P ALL | grep 0 | tr -s ' ' | awk '{print $4}'", $output);
echo "$output <br>";
con las dos declaraciones el resultado es:
el nombre de mi servidor 2.19 2.21 2.30 2.26 2.22 2.20 2.14 2.09 2.07 0
Mi servidor tiene una CPU de 8 núcleos y quiero usar la salida directamente en los gráficos de Google, por lo que necesito solo el porcentaje de CPU para 8 núcleos, sin el nombre del servidor.
¿Me puede ayudar con este problema?
echo(implode("\n", $output)[1]);
hace lo que necesitas?awk
o elcut
comando?mpstat -P ALL
? Ejecutando exactamente los mismos comandos que usted, no obtengo mi nombre de host en la salida. Obtuve lo siguiente (4 núcleos): `23/05/2013% usr 6.71 8.05 7.45 5.87 5.48`.Respuestas:
Estoy haciendo eco de la cadena porque mi sistema
mpstat
es diferente de lo que muestra en su pregunta, pero debería funcionar si su salida es lo que ha publicado.El script de Perl solo busca el tramo más largo de dígitos, puntos decimales y espacios (
[\d\. ]+
) y lo imprime, que debería separar los nombres del servidor de los datos con nombres arbitrarios del servidor. Fallará si el nombre de su servidor termina con un número, algo asífoo bar 12
. No se tratará12
como parte del nombre del servidor, sino como parte de los datos.Si los nombres de su servidor nunca contienen espacios (lo cual supongo que no contienen), puede usar esta
gawk
versión si lo prefiere:fuente