SSHを介してBASHファイルからWGETを介して100,000個以上のファイルをダウンロードすることはどの程度信頼できますか?
質問
WGETコマンドを含むBASHファイルがあり、合計で約20GBのデータをダウンロードします。
bashファイルは次のようになります:
wget http://something.com/path/to/file.data
wget http://something.com/path/to/file2.data
wget http://something.com/path/to/file3.data
wget http://something.com/path/to/file4.data
そして、これには正確に114,770行があります。私がアカウントを持っているサーバーにSSHがこれを実行して実行することはどれほど信頼できますか?私のSSHセッションは最終的にタイムアウトしますか?私はずっとsshをしなければならないでしょうか?地元のコンピューターがクラッシュ/シャットダウンした場合はどうなりますか?
また、誰もがこれがどれだけのリソースを取るか知っていますか?共有サーバーでこれをやりたいと思っていますか?
私はこれが奇妙な質問であることを知っています。誰かがアイデアを持っているかどうか疑問に思っています。ありがとう!
解決
使用する
#nohup ./scriptname&> logname.log
これにより確実になります
- SSHセッションが中断されていても、プロセスは継続されます
- 動作しているので、あなたはそれを監視することができます
また、定期的な間隔で何らかのプロンプトを持つことができることをお勧めします。ログ分析に適しています。例えば #echo "1000 files copied"
リソースの利用に関する限り、それは完全にシステムに依存し、主にネットワーク特性に依存します。理論的には、データサイズと帯域幅だけで時間を呼び出すことができます。しかし、実際の生活では、遅延、レイテンシ、データロスが登場します。
だから、いくつかのassuptionsを作り、いくつかの数学を行うと、あなたは答えを得る:)
他のヒント
通信媒体、ハードウェア、...の信頼性に依存します!
使用できます screen
リモートコンピューターから切断している間、実行を続けます。
スクリプトをシェルから切断し、バックグラウンドで実行して(nohupを使用して)実行して、ログアウトするときに実行され続けるようにします。
また、ダウンロードされたすべてのファイルをログに記録するログファイルや、すべてのエラーメッセージなど、何らかの進行状況インジケータが必要です。 Nohupはstderrとstdoutをファイルに送信します。このようなファイルを使用すると、壊れたダウンロードをピックアップし、後で実行することができます。
コマンドをダウンして出力を気に入ったかどうかを確認するために、小さなファイルセットを使用して最初にテスト実行を行います。
シェルから切り離すことをお勧めします nohup
.
$ nohup myLongRunningScript.sh > script.stdout 2>script.stderr &
$ exit
スクリプトは完了するまで実行されます - 全体にログインする必要はありません。
wgetを与えることができるオプションを確認して、失敗して再試行することができます。
可能であれば、すべてのファイルのMD5チェックサムを生成し、それを使用してそれらがすべて正しく転送されたかどうかを確認します。
から始めてください
nohup ./scriptname &
そして、あなたは元気でなければなりません。また、進捗状況を記録して、それがどこで停止したかを知ることができるようにすることをお勧めします。
wget url >>logfile.log
十分かもしれません。
進捗状況をライブで監視するには、できます。
tail -f logfile.log
代替テクノロジーを見ることは価値があるかもしれません rsync. 。私は多くのプロジェクトでそれを使用しましたが、非常にうまく機能しています。