我正在尝试通过 PHP 脚本执行 Linux 命令来获取每个核心的 CPU 百分比:
… 和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>";
使用这两个语句,输出为:
我的服务器的名称2.19 2.21 2.30 2.26 2.22 2.20 2.14 2.09 2.07 0
我的服务器有 8 核 CPU,我想将输出直接用于 Google 图表,因此我只需要 8 核的 CPU 百分比,而不需要服务器名称。
能帮我解决这个问题吗?
答案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>";
?>