2016-09-22 66 views
2

我有一个php文件,它接受来自URL的几个参数,然后运行一个exec命令,其中我想等待并显示exec的结果。这个exec命令大约需要20-30秒才能完成。它从来没有完成,因为网页只是得到一个nginx 502错误的网关错误(超时)..而不是延长nginx的超时错误,因为这是不好的做法,有一个连接挂了很长时间,我怎么能运行在后面的php的执行然后让它在完成后返回到页面上? 还是有没有更好的方式来完成这个没有使用PHP?PHP等待exec完成并输出结果

+0

你必须告诉nginx这个脚本是长时间运行的,所以它不会超时。 –

+0

给我们一些更多的细节和例子。我最初的想法是你需要一个cron作业和一个网页显示缓存 – Machavity

+0

@MarcB我怎样才能用nginx选出这个脚本并告诉它不超时?我尝试了nginx和php-fpm confs中的各种设置,但都没有成功。 – pete

回答

1

让PHP触发一个exec分支的脚本,以便它在后台运行(以&结尾)。然后页面应该返回一些js,通过ajax请求定期轮询服务器以检查原始脚本的状态。该脚本应将其STDOUT和STDERR输出到唯一文件,以便轮询脚本可以检查状态。

编辑:如果您需要了解脚本的退出代码把它包在另一个脚本:

#/bin/bash 
uniqId=$1 
yourscript $uniqId & 
myPid=$! 
echo $myPid > $uniqId'.pid' 
wait $myPid 
echo $? > $uniqId'.returned' 

呼叫像./wrapper.sh someIdUniqueToClient &。未经测试,但您获得了要点。

+0

我以前完成过类似的任务,是正确的答案。 –