我正在使用Ubuntu 12上的nginx上运行的PHP网站,它可以在后台启动长时间运行的作业。为什么在后台运行PHP进程会导致整个站点挂起?
这个想法是,用户提交一个表单,它在另一个进程中启动一个长时间的工作(php_fpm应该处理这个问题),并且如果作业开始或者没有,立即向用户返回成功/失败消息。
也许这是不是做的最好的方法,但是这是我在做什么:
`php $docroot/longjob.php $this->ID arg2 &> error_log &`;
($这个 - > ID和ARG2都是简单的字符串配置工作。)
作业启动并正常运行,但面向前方的网站会挂起直到作业完成。页面无法加载,并且服务器在长时间工作完成之前不会响应。我并不期待这一点。为何会发生这种情况?
更新:所以,我一直在尝试......不幸的是,关闭会话处理程序并尝试使用nohop命令并没有阻止挂起。但它只是对我来说,在我发起请求的机器上。我可以从我的手机登录,并且该网站可以正常工作,而且它也适用于其他用户(phew)。任何其他的想法,为什么它只会挂在发起请求的机器上?
如果它的事项,这是时显示的默认nginx的错误页面:
您正在查找的页面暂时不可用。
请稍后再试。
内置会话save_handler将锁定会话文件,直到该过程完成并且下一个进程需要等待,直到会话文件解锁。因此,如果您正在使用会话,则可能需要在启动长时间运行的作业之前调用session_write_close。 –
@AlexandruG。我确实在使用会话。从来没有想到这一点。当我有机会并且回报时,我会尝试的! – Matt
@AlexandruG。不幸的是,使用'session_write_close()不会停止等待。但是,似乎只能从我开始工作的计算机上挂起。所以我想知道是否仍然存在会话问题......或者是nginx/php-fpm做了些什么... – Matt