【发布时间】:2017-05-08 23:49:50
【问题描述】:
我有一个这样的对象服务器数组:
Array
(
[0](
(
[id] => 1
[version] => 1
[server_addr] => 192.168.5.210
[server_name] => server1
)
)
[1](
(
[id] => 2
[server_addr] => 192.168.5.211
[server_name] => server2
)
)
)
通过运行下面的代码,我可以获得所需的输出
foreach ($model as $server) {
$cpu_usage = shell_exec('sudo path/to/total_cpu_usage.sh '.$server->server_addr);
$memory_usage = shell_exec('sudo path/to/total_memory_usage.sh '.$server->server_addr);
$disk_space = shell_exec('sudo path/to/disk_space.sh '.$server->server_addr);
$inode_space = shell_exec('sudo path/to/inode_space.sh '.$server->server_addr);
$network = shell_exec('sudo path/to/network.sh '.$server->server_addr);
exec('sudo path/to/process.sh '.$server->server_addr, $processString);
$processArray = array();
foreach ($processString as $i) {
$row = explode(" ", preg_replace('/\s+/', ' ', $i));
array_push($processArray,$row);
}
$datetime = shell_exec('sudo path/to/datetime.sh '.$server->server_addr);
echo $cpu_usage;
echo $mem_usage;
echo $disk_space;
......
}
我的脚本类似:
#!/bin/bash
if [ "$1" == "" ]
then
echo "To start monitor, please provide the server ip:"
read IP
else
IP=$1
fi
ssh root@$IP "date"
但 5 台服务器的整个过程需要 10 秒,而 1 台服务器的时间不到 2 秒。这是为什么?有没有办法减少时间?我的猜测是 exec 命令在进入下一个循环之前等待输出分配给变量?我试着用谷歌搜索了一下,但大多数答案都是为了不返回任何输出......虽然我需要输出
【问题讨论】:
-
start_time=2016-12-23T17:42:50, end_time=2016-12-23T17:43:01。 5 个循环大约 11 秒,第一个循环在 42:51 结束,所以大约 1++秒
标签: php shell foreach exec shell-exec