我需要一个帮助来理解为什么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 >
/fullpath/a_teste_03.txt &]
in /fullpath/a_teste_exec_03.php on line nn
有什么问题?怎么修?谢谢你的帮助。
答案 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
两个脚本都需要在同一个域下运行,一切正常。