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



在 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过程完成?

提前谢谢你!

超过与

服务器的最大同时连接可能是问题所在。因此,限制同时连接或简单地逐个上传。如果在浏览器之前等待是您的问题,您可以将以下内容添加到您的 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脚本后,您甚至可以关闭浏览器,上面的代码段将为您创造魔术。