PHP exec()不断重新创建

时间:2018-01-26 14:39:53

标签: php

我需要一个帮助来理解为什么PHP脚本进程不断重新创建由CentOS上的exec()在后台启动的脚本。这个脚本在EasyApache3 PHP 5.4下运行多年,在更新EasyApache4和PHP 5.6之后,行为发生了变化。

====< PHP 01> ====

<html><body>
    Test <? echo "Date: " . date("d/m/Y h:i:sa");?> - run PHP exec () that call a second script in background.php script.<br><br>
    The script create a txt file.<br><br><br><br>
    <a href="http://domain/index.php"  class="login_admin">Return to homepage....</a>
</body></html>
<?PHP
    error_reporting(E_ALL);
    echo "<script language=\"javascript\"> window.alert('The create txt file process will be started in background.'); </script>";
    exec("php -f /full_path/a_teste_exec_03_background.php > /full_path/a_teste_03.txt &", $o, $v);
    print_r($o);
    echo $v;
?>

====&LT; PHP 02&gt; ====

<?PHP
    $a_teste_log  = fopen("a_teste_03_log.txt","a");
    $linha_log    = "\n\r" . date("Y-m-d h:i:sa") . " - Creation file...\n\r";
    fwrite($a_teste_log, $linha_log);
    fclose($a_teste_log);
    exit;
?>

查看服务器有很多PHP02进程,具有不同的PID,并且仅在消耗资源后停止并发送以下错误消息:

    PHP Warning:  
    exec(): Unable to fork 
    [php -f /fullpath/a_teste_exec_03_background.php &gt; 
        /fullpath/a_teste_03.txt &amp;] 
        in /fullpath/a_teste_exec_03.php on line nn

有什么问题?怎么修?谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

将EasyApache3更新到EasyApache4和PHP从5.4到5.6之后,使用PHP exec()命令改变了创建过程的行为。

最后,经过多次测试,我了解在后台启动的进程的所有者与开始使用浏览器时的进程不同。

我做了什么,在启动URL php脚本的同一域下创建一个shell脚本。在这个shell中我运行了一个wget命令:

恢复,第一个PHP脚本运行命令:

exec(&#34; ./ script_exec_background.sh&gt; / dev / null 2&gt; / dev / null&amp;&#34;);

...而且shell包含

#!/斌/庆典 wget -q http://www.domain/xxx/yyy/database_update.php

两个脚本都需要在同一个域下运行,一切正常。