调用php脚本结束时,PHP后台作业停止

时间:2012-12-04 17:00:19

标签: php linux scp

在LAMP框中,我通过PHP的exec函数在循环中调用SCP复制功能,将多个图像复制到远程服务器:

exec("scp ".$this->GetUploadPath(true)." ".$currentServer->Scp.":".$this->GetServerPath($currentServer, true));

结果:工作正常,但PHP脚本需要几秒钟才能完成。

但是我不希望PHP脚本等待SCP工作完成,所以我尝试了以下一项:

exec("nohup scp ".$this->GetUploadPath(true)." ".$currentServer->Scp.":".$this->GetServerPath($currentServer, true) . " 1>/dev/null/ 2>&1 &");

结果:PHP脚本速度更快,但SCP没有完成。图像不会复制到远程服务器。

exec("nohup scp ".$this->GetUploadPath(true)." ".$currentServer->Scp.":".$this->GetServerPath($currentServer, true) . " &");

结果:图像被复制,但是php脚本的运行时间没有任何改善,所以我猜php脚本仍然等待SCP例程完成,尽管我“背景”了这个电话。

任何想法如何实现它,PHP脚本不等待,但SCP过程完成了?

提前谢谢!

1 个答案:

答案 0 :(得分:0)

超过与服务器的最大同时连接可能是问题。因此限制同时连接或只是逐个上传。如果在浏览器出现问题之前等待,可以将以下内容添加到php脚本

ignore_user_abort(true);
set_time_limit(0);

并使用循环以下

上传
exec("scp ".$this->GetUploadPath(true)." ".$currentServer->Scp.":".$this->GetServerPath($currentServer, true) . " 1>/dev/null/ 2>&1");
从您的浏览器触发php脚本后,您甚至可以关闭浏览器,上面的代码将为您带来魔力。