1

我在 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,所以它不应该花那么长时间......我必须终止脚本并重新开始......直到它们都正确上传。

我尝试添加以在后台运行它,但我在所有上传开始的地方&得到了很多权利。curl: (28) Timeout was reached

如何修复我的脚本以毫无问题地上传文件?

4

3 回答 3

2

试试这些 curl 选项来控制它的行为。

connect-timeout <secs>设置连接尝试失败前的秒数。

--speed-time--speed_limit设置在 curl 中止传输之前允许的比每秒字节数慢的传输秒数。

--speed_limit 以字节/秒为单位设置限制,低于该限制 curl 将中止传输。

  curl --connect_timeout <seconds> --speed-time <secs> --speed_limit <speed in bytes/sec>

-v提供有关传输的更多信息,如果您试图找出传输如此缓慢的原因,这可能会有所帮助。

于 2013-03-20T12:25:10.697 回答
1

猜测一下,FTP 连接或所有连接在您的目标服务器上都受到速率限制。

因此,某些文件上传的延迟是由于 SYN 数据包被丢弃。

我建议您运行一个 FTP 会话并使用它来递归上传或在curl.

理想情况下,您的目标服务器将支持rsyncover ssh:这将是最佳带宽。


更新
快速搜索后,有一个命令行程序称为lftp提供 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在确定自己的论点正确之前不要这样做!

于 2013-03-20T12:24:29.017 回答
0

感谢您的帮助,我选择了wput

./wput/wput.exe -N deploy "ftp://****:****@address.co.uk/public_html/java/desktop/"
于 2013-03-20T15:39:50.200 回答