Bash cURL需要很长时间才能完成FTP上传
我在bash中编写了一个较长的部署脚本,在cygwin下运行。如果部署到远程服务器,脚本将使用curl将生成的应用程序上载到FTP服务器,如下所示:Bash cURL需要很长时间才能完成FTP上传,bash,curl,upload,ftp,cygwin,Bash,Curl,Upload,Ftp,Cygwin,我在bash中编写了一个较长的部署脚本,在cygwin下运行。如果部署到远程服务器,脚本将使用curl将生成的应用程序上载到FTP服务器,如下所示: if [ $where == "remote" ] then for i in `find deploy/ -type f`; do curl.exe -u "***:***" -T $i "ftp://address.co.uk/public_html/java/desktop/$i" done fi 问题是有时
if [ $where == "remote" ]
then
for i in `find deploy/ -type f`; do
curl.exe -u "***:***" -T $i "ftp://address.co.uk/public_html/java/desktop/$i"
done
fi
问题是有时curl无法完成上传,只是坐在那里阻止其他下载
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- 0:15:14 --:--:-- 0
此特定文件的大小约为2,5KB,因此不应花费那么长的时间。。。我必须杀掉剧本,重新开始。。。直到他们全部正确上传
我试着添加&
在后台运行它,但我得到了很多卷曲:(28)超时到达了所有上传开始的地方
如何修复脚本以上载文件而不出现问题?据猜测,目标服务器上的FTP连接或所有连接都有速率限制
因此,某些文件上载的延迟是由于SYN数据包被丢弃所致
我建议您运行一个FTP会话,并使用它来递归上传或在调用curl
之间引入延迟
理想情况下,您的目标服务器将通过ssh
支持rsync
:这将是最佳带宽
更新
在快速搜索之后,有一个名为的命令行程序提供ftp镜像功能
根据指南改编,类似这样的内容应该可以做到:
#!/bin/bash
HOST='address.co.uk'
USER='myuser'
PASS='mypass'
TARGETFOLDER='/public_html/java/desktop/'
SOURCEFOLDER='deploy/'
lftp -f "
open $HOST
user $USER $PASS
lcd $SOURCEFOLDER
mirror --reverse --delete --verbose $SOURCEFOLDER $TARGETFOLDER
bye
"
我建议您不要使用——delete
,直到您确定参数正确为止 试试这些卷曲选项来控制它的行为
连接超时
设置连接尝试失败前的秒数
--speed time
设置在curl中止传输之前每秒允许的传输速度低于--speed\u limit
字节数的秒数
--speed\u limit
设置curl将中止传输的限制(以字节/秒为单位)
curl --connect_timeout <seconds> --speed-time <secs> --speed_limit <speed in bytes/sec>
curl--连接超时--速度时间--速度限制
-v
提供了有关转账的更多信息,如果您试图找出转账速度如此缓慢的原因,这些信息可能会有所帮助。感谢您的帮助,伙计们,我选择了:
我看不出这些对我有什么帮助,在这里中止转账不是一个选择。我使用了-v
,一切连接都没有问题,但有些上传可能会停滞。例如,如果连接超时,可以检查curl的返回代码。需要稍微修改脚本以检查返回代码,并重复curl命令直到成功。这将减少上传过程中令人烦恼的干预。我希望ssh是一个选项,我将使用各种延迟进行测试并报告。使用最多30秒的超时并不能解决问题。超时对您没有帮助,您是否尝试过在curl
调用之间设置“睡眠10”?
./wput/wput.exe -N deploy "ftp://****:****@address.co.uk/public_html/java/desktop/"