Я пытаюсь выполнить команду Linux через PHP-скрипт, чтобы получить процент загрузки процессора для каждого ядра:

… С cut:

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

... с awk:

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

с двумя утверждениями вывод:

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

Мой сервер имеет 8-ядерный ЦП, и я хочу использовать вывод непосредственно в диаграммах Google, поэтому мне нужен только процент ЦП для 8 ядер без имени сервера.

Можете помочь мне с этим вопросом?

1 ответ1

1

Я повторяю строку, потому что mpstat моей системы отличается от того, что вы показываете в своем вопросе, но оно должно работать, если ваш вывод соответствует тому, что вы опубликовали.

<?
$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>";
?>

Скрипт Perl просто ищет самые длинные отрезки цифр, десятичных точек и пробелов ([\d\. ]+) И печатает их, что должно отделять имена серверов от данных с произвольными именами серверов. Он потерпит неудачу, если имя вашего сервера оканчивается цифрой, например, foo bar 12 . Он не будет воспринимать 12 как часть имени сервера, а как часть данных.

Если имена вашего сервера никогда не содержат пробелов (что, я полагаю, не содержит пробелов), вы можете использовать эту версию gawk если хотите:

<?
$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>";
?>

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .