我在运行一个连续的后台进程时出现问题,其中父进程启动2或3子进程然后自行结束,子进程计算量很大,因此它们将花费大量时间。
我正在使用exec命令启动进程,但不知道它没有启动它既不会生成任何错误(错误报告已打开,E_ALL和display_errors)
以下是我尝试这样做的方法
error_reporting(E_ALL);
ini_set('display_errors',1);
$output = '';
$dir = dirname(__FILE__).'/';
//$cmd = "nohup php {$dir}/background-service.php > /dev/null & echo $!";
$cmd = "nohup php background-service.php >/dev/null 2>&1 &";
exec($cmd );
背景service.php
<?php
ini_set('max_execution_time', 0);
ini_set('display_errors',1);
file_put_contents('a'.time().'.txt',"this is the test code");
?>
当我直接点击文件时会生成一个文件,但是没有exec,我已经测试过exec已启用(ubuntu服务器)
if ( $safe_mode = ini_get( 'safe_mode' ) && strtolower( $safe_mode ) != 'off' )
{
echo 'Safe Mode is Disabled';
}
else
echo 'Safe Mode is Enabled<br/>';
if ( in_array( 'exec', array_map( 'trim', explode( ',', ini_get( 'disable_functions' ) ) ) ) )
{
echo 'exec is Disabled';
}
else
echo 'exec is Enabled<br/>';
有人请告诉我我错在哪里,我如何检测它是否被服务器禁用
由于
答案 0 :(得分:1)
这只是猜测,但请尝试使用您正在执行的任何内容的完整路径。从shell运行命令可能适用于您的用户帐户,但请记住,该进程正在以apache用户身份运行。
此外,使用带有其他参数的exec()可能对您有用。第三个参数可以指定存储命令返回状态的位置(可能帮助您解决这个问题)。 (礼貌the PHP manual)
答案 1 :(得分:1)
检查此safe-mode-exec-dir并且您不需要为命令行脚本设置最长执行时间,默认情况下它们没有限制。