我有一个php文件,它接受来自URL的几个参数,然后运行一个exec命令,其中我想等待并显示exec的结果。这个exec命令大约需要20-30秒才能完成。它从来没有完成,因为网页只是得到一个nginx 502错误的网关错误(超时)..而不是延长nginx的超时错误,因为这是不好的做法,有一个连接挂了很长时间,我怎么能运行在后面的php的执行然后让它在完成后返回到页面上? 还是有没有更好的方式来完成这个没有使用PHP?PHP等待exec完成并输出结果
2
A
回答
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
我以前完成过类似的任务,是正确的答案。 –
相关问题
- 1. 等待$ http完成以便在AngularJS中输出结果
- 2. 在PHP中执行exec()或system()并且不要等待输出
- 3. 等待Flex效果完成
- 4. 等待函数完成执行并使用结果
- 5. PHP不等待exec()完成,当我想要它
- 6. 等待完成
- 7. 等待完成
- 8. php exec命令(或类似的)不等待结果
- 9. PHP挂起等待EXEC从wget的+ mysql命令返回结果
- 10. 如何并行运行一组函数并在完成后等待结果?
- 11. 等待webworker完成
- 12. 等待NSURLSessionTask完成
- 13. jquery,等待完成
- 14. 等待IDBCursor.onsuccess完成
- 15. 等待ExecWB完成
- 16. 等待GUI完成
- 17. WebRequest.GetResponse等待完成
- 18. 等待BackgroundWorker完成?
- 19. 等待webrequest完成
- 20. 等待AsyncTask完成
- 21. delayed_job等待完成
- 22. 等待UIView完成
- 23. 等待shutil.copyfile完成
- 24. 等待SwingWorker完成
- 25. 等待$ .post完成
- 26. 等待AFJSONRequestOperation完成
- 27. QNetworkReply等待完成
- 28. libpq - PQsendQuery等待完整结果
- 29. 如何让jQuery等待效果完成?
- 30. 问题与块,并等待它完成
你必须告诉nginx这个脚本是长时间运行的,所以它不会超时。 –
给我们一些更多的细节和例子。我最初的想法是你需要一个cron作业和一个网页显示缓存 – Machavity
@MarcB我怎样才能用nginx选出这个脚本并告诉它不超时?我尝试了nginx和php-fpm confs中的各种设置,但都没有成功。 – pete