我有一个BASH文件,其中包含WGET命令,可下载超过20GB数据的100,000个文件。

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会议最终会止步吗?我必须整个时间都必须成为SSHED吗?如果我的本地计算机崩溃/关闭怎么办?

另外,有人知道这会有多少资源吗?我想在共享服务器上执行此操作吗?

我知道这是一个奇怪的问题,只是想知道是否有人有任何想法。谢谢!

有帮助吗?

解决方案

利用

#nohup ./scriptName&> logName.log

这将确保

  • 即使SSH会话中断,该过程也将继续
  • 您可以监视它,因为它正在行动

还会建议您定期进行一些提示,非常适合日志分析。例如 #echo "1000 files copied"


就资源利用而言,这完全取决于系统,主要取决于网络特征。从理论上讲,您可以仅使用数据大小和带宽来调用时间。但是在现实生活中,延迟,延迟和数据损失呈现了图片。

因此,进行一些爆发,做一些数学,您会得到答案:)

其他提示

取决于通信介质的可靠性,硬件...!

您可以使用 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. 。我在许多项目上都使用了它,并且非常好。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top