1

cygwinで実行するbashで長いデプロイメントスクリプトを作成しました。リモートサーバーにデプロイする場合、スクリプトは次のように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

問題は、カールがアップロードを完了できず、そこに座って他のダウンロードが表示されないようにすることです。

  % 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

これらのカールオプションを試して、その動作を制御してください。

connect-timeout <secs>接続試行が失敗するまでの秒数を設定します。

--speed-time--speed_limitcurlが転送を中止する前に、1秒あたりのバイト数よりも遅い転送の秒数を設定します。

--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パケットが破棄されることが原因です。

1つのFTPセッションを実行し、それを使用して再帰的にアップロードするか、の呼び出しの間に遅延を導入することをお勧めしますcurl

理想的には、宛先サーバーがサポートrsyncsshます。これは帯域幅に最適です。


更新
クイック検索の後に、lftpftpミラーリング機能を提供するというコマンドラインプログラムがあります。

ここのガイドから適応すると、このようなものがトリックを行うはずです:

#!/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 に答える