You can run your scripts simultaneously with popen() and later download the output of fread() .
//execute foreach ($model as $server) { $server->handles = [ popen('sudo path/to/total_cpu_usage.sh '.$server->server_addr, 'r'), popen('sudo path/to/total_memory_usage.sh '.$server->server_addr, 'r'), popen('sudo path/to/disk_space.sh '.$server->server_addr, 'r'), popen('sudo path/to/inode_space.sh '.$server->server_addr, 'r'), popen('sudo path/to/network.sh '.$server->server_addr, 'r'), ]; } //grab and store the output, then close the handles foreach ($model as $server) { $server->cpu_usage = fread($server->handles[0], 4096); $server->mem_usage = fread($server->handles[1], 4096); $server->disk_space = fread($server->handles[2], 4096); $server->inode_space = fread($server->handles[3], 4096); $server->network = fread($server->handles[4], 4096); foreach($server->handles as $h) pclose($h); } //print everything print_r($model);
I tested similar code to execute 5 scripts that sleep for 2 seconds, and all this took only 2.12 seconds instead of 10.49 seconds with shell_exec() .
Update 1: Thank you very much Markus AO for pointing out optimizations.
Update 2: Changed the code to remove the possibility of rewriting. The results are now inside $model .
It can also show which server refused the connection if the problem with sshd affects you.
source share