在PHP中的shell_exec()中并行执行每个N命令

时间:2017-10-22 10:09:18

标签: php bash shell

我想在bash中并行执行N个命令。然后在所有命令完成后接下来的N个命令,然后是接下来的N个命令......

因为我不是shell脚本的专家,所以我使用了PHP。但我怀疑我的代码没有做到我最需要的东西:

<?php
// d() is a function like var_dump()

d($d);
$ips = array(
"83.149.70.159:13012" => 8,
"37.48.118.90:13082" => 77,
"83.149.70.159:13082" => 77,);

d($ips);
reset($ips);

$prx = "storm";

$f = array();

foreach ($d as $calln) {
$ip = current($ips);
$ipkey = key($ips);
d($ip, $ipkey);
$comd = choose_comd($prx);
d( $comd);

 $f[] = shell_exec($comd);
d($f);

choose_limiting ($prx);

d($GLOBALS['a']);
}


function choose_comd ($prx) {
    d($GLOBALS['calln']);
    switch ($prx) {


        case "storm":
        return "cd /Users/jMac-NEW/HoldingForDO/phub/phubalt_pages && curl -x {$GLOBALS['ipkey']} \"https://catalog.loc.gov/vwebv/search?searchArg={$GLOBALS['calln']}&searchCode=CALL%2B&searchType=1&limitTo=none&fromYear=&toYear=&limitTo=LOCA%3Dall&limitTo=PLAC%3Dall&limitTo=TYPE%3Dall&limitTo=LANG%3Dall&recCount=1200\" >trial_{$GLOBALS['calln']}_out.html 2> trial_{$GLOBALS['calln']}_error.txt &";;

      // more cases ...


}

function choose_limiting ($prx){
    switch ($prx) {
        case "":
        if (!next($ips)) {
    sleep (80);
    reset($ips);
        }
        case "storm":

            if (!isset($GLOBALS['a'])) {
                echo "if";
                $GLOBALS['a'] = 0;
            }
            elseif ($GLOBALS['a'] == current($GLOBALS['ips'])) {
                echo "elseif";
                next($GLOBALS['ips']);
                sleep(80/count($GLOBALS['ips']) - 7); // 80 is the standard
                $GLOBALS['a'] = 0;

            }
            else {
                echo "else";
                $GLOBALS['a']++;

            }


}
}


function trying () {
    $GLOBALS['a']++;
    d($GLOBALS['a']);
}

首先,我不确定围绕shell_exec运行循环(&#34;命令...&amp;&#34;)是否会使所有命令并行运行。

其次,循环遍历所有可能的命令,但是在使用shell_exec()运行每N个命令后,使用任意/估计持续时间为70的sleep()。 70秒的睡眠时间可能会或可能不会与之前执行的所有N个命令的完成相对应,但我只是假设它会在那里。

我可以知道我所做的事是否符合我的目标?如果不是,为什么?还有什么其他解决方案?

实际上我并不介意直接使用bash,但问题是循环的每次迭代都应该从一个php数组$ d中加入一个变量$ calln,该数组填充在未显示的脚本的前面部分中。如果PHP可以做我需要的,请坚持使用PHP。

0 个答案:

没有答案