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