Bash 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 问题是有时

我在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
问题是有时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/"