我在我的php脚本中调用它:
exec("gutschein.php >/dev/null 2>&1 &");
调用脚本(生成pdf并通过电子邮件发送)可以正常工作,但过程没有在后台运行(我在gutschein.php中使用sleep语句检查了它)。浏览器一直挂起,直到执行gutschein.php完成。
我还检查了以下内容:
exec("/usr/bin/php gutschein.php >/dev/null 2>&1 &");
或
shell_exec("/usr/bin/php gutschein.php >/dev/null 2>&1 &");
它不会改变任何东西。该脚本实际上是在linux服务器上运行的。有谁知道我做错了什么?
答案 0 :(得分:4)
尝试系统和/或passthru。我以前遇到过exec的问题,因为它停止尝试用数据填充返回数组,直到进程完成。
这些都会回显原始输出,所以即使它们工作,你也可能需要用丢弃的输出缓冲区处理它。
答案 1 :(得分:1)
您可以使用屏幕:screen -d -m /usr/bin/php gutschein.php
Here是屏幕手册。
答案 2 :(得分:1)
请参阅HERE的经验。 我尝试和为我工作的方式 -
php -q /path/to/my/test/script/cli_test.php argument1 < /dev/null &
在PHP中,它就像
exec('php -q /path/to/my/test/script/cli_test.php argument1 < /dev/null &')
答案 3 :(得分:0)
您可以尝试使用以下两个命令之一从PHP运行后台作业:
$out = shell_exec('nohup /usr/bin/php /path/to/gutschein.php >/dev/null 2>&1 &');
OR
$pid = pclose(popen('/usr/bin/php gutschein.php', 'r'));
它将在后台执行命令并返回PID,您可以使用条件$pid > 0
进行检查以确保它有效。
答案 4 :(得分:0)
必须重定向所有输出,否则只要执行gutschein.php,脚本就会挂起。试试
exec('/usr/bin/php gutschein.php &> /dev/null &');
答案 5 :(得分:0)
/**
* @author Micheal Mouner
* @param String $commandJob
* @return Integer $pid
*/
public function PsExec($commandJob)
{
$command = $commandJob . ' > /dev/null 2>&1 & echo $!';
exec($command, $op);
$pid = (int) $op[0];
if ($pid != "")
return $pid;
return false;
}
这对我有用..检查一下
同样,返回后台进程的进程ID
答案 6 :(得分:-2)
浏览器可能正在等待响应,因此让脚本生成任何输出并终止“主进程”。一个简单的
die('ok');
应该做的。