0

我在运行一个连续的后台进程时遇到问题,其中父进程启动 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 );

后台服务.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/>';

有人请告诉我哪里错了,我如何检测它是否被服务器禁用

谢谢

4

2 回答 2

1

这只是一个猜测,但请尝试使用您正在执行的任何内容的完整路径。从 shell 运行命令可能适用于您的用户帐户,但请记住该进程是以 apache 用户身份运行的。

此外,使用带有附加参数的 exec() 可能对您有用。第三个参数可以指定将命令的返回状态存储在哪里(可能会帮助您弄清楚这一点)。(由PHP 手册提供)

于 2013-02-28T07:03:54.663 回答
1

检查此安全模式执行目录,默认情况下,您不需要为命令行脚本设置最大执行时间,它们没有限制。

于 2013-02-28T07:06:20.493 回答