【发布时间】:2012-11-22 09:09:31
【问题描述】:
在 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 过程已完成?
提前谢谢你!
【问题讨论】:
-
您是否尝试过将 SCP 命令的输出通过管道传输到日志文件中,这可能包含有关 SCP 失败原因的一些信息?
-
是的,我做到了。里面什么都没有。我发现的一个错误是我删除本地文件太快了。但是我将删除功能注释掉了,但是现在复制了 10 个图像中的 4 个。错误和输出日志保持为空。
-
这是一个有根据的猜测,但请尝试 ignore_user_abort(true);可能是它看到客户端断开连接并结束脚本及其子进程。
-
现在它正在上传一些文件,而另一些则没有。我得到的错误信息是:“ssh_exchange_identification: Connection closed by remote host lost connection”
-
离开 nohup 似乎效果更好。