使用dev> null&运行exec()命令不起作用,但dev> null确实有效

时间:2013-01-28 07:23:00

标签: php exec

我有这个exec命令运行得很好,但没有释放浏览器(即有一个php超时问题,但实际命令继续运行):

exec("/usr/local/php53/bin/php csv.php $file $user > /dev/null");

当我运行ps auxw时,我看到了这两个正在运行的进程:

sh -c /usr/local/php53/bin/php csv.php /tmp/php9Pwu9e 294  >
/usr/local/php53/bin/php csv.php /tmp/php9Pwu9e 294

但是,当我运行下面的代码时,浏览器立即免费,但命令不会继续运行:

exec("/usr/local/php53/bin/php csv.php $file $user > /dev/null &");

当我运行ps auxw时,我看到一个正在运行的进程在16秒后死亡(并且似乎很快耗尽内存并使用大量CPU%):

/usr/local/php53/bin/php csv.php /tmp/php9Pwu9e 294

然后该过程在没有实际做任何事情的情况下死亡。不确定&符号正在做什么会导致这种情况。

为什么sh -c出现在最后没有&符号时?我觉得这可能是一些事情,但不知道是什么。

修改

因为这会不断出现作为答案, 我也尝试过:

exec("/usr/local/php53/bin/php csv.php $file $user > /dev/null 2>&1 &");

这表明了与上述相同的问题。 下面的代码确实可以运行,但不会释放浏览器。

exec("usr/local/php53/bin/php csv.php $file $user > /dev/null 2>&1");

3 个答案:

答案 0 :(得分:0)

试试这个

exec(“nohup php csv.php $ file $ user> / dev / null&”);

答案 1 :(得分:0)

尝试将输出和错误重定向到/dev/null(或您选择的其他输出文件,前提是它具有为运行Web服务器的用户设置的写入权限),并将其设置为后台使用&符进行处理,如PHP manual user note

所述
<?php

exec("php /var/www/foo.php > /dev/null 2>&1 &");

尝试了它并且它按预期工作:调用脚本立即完成,后台进程一直运行所需的时间。

答案 2 :(得分:0)

这个问题比我想象的要简单得多。问题是找不到$file(这是一个存储在/tmp目录中的上传文件)。我不确定为什么,但我想它与后台进程可以达到它之前被销毁的文件有关。

解决方案是将move_uploaded_file()文件移至永久位置,然后使用该文件运行脚本。这很有用。