我有一个php文件,从URL中获取一些参数,然后运行一个exec命令,我想等待并显示exec的结果。这个exec命令大约需要20-30秒才能完成。它永远不会完成,因为网页只是得到一个nginx 502错误的网关错误(超时)..而不是扩展nginx超时错误,因为这是一个很长的连接挂起的不良做法,我怎么能在后面运行php的exec它完成后会在页面上返回吗? 或者有没有更好的方法来实现这一点而不使用PHP?
答案 0 :(得分:1)
让PHP触发exec到分叉的脚本,以便它在后台运行(以&
结尾)。然后该页面应返回一些js,这些js定期通过ajax请求轮询服务器以检查原始脚本的状态。脚本应将其STDOUT和STDERR输出到唯一文件,以便轮询脚本可以检查状态。
编辑:如果您需要知道脚本的退出代码将其包装在另一个脚本中:
#/bin/bash
uniqId=$1
yourscript $uniqId &
myPid=$!
echo $myPid > $uniqId'.pid'
wait $myPid
echo $? > $uniqId'.returned'
像./wrapper.sh someIdUniqueToClient &
一样打电话。未经测试,但你得到了要点。