小故事:我们需要一个坚如磐石的可靠的文件传送程序。 我们有经常被写入到我们需要从中移动文件的源代码目录。 这些文件是成对的 – 一个大的二进制文件和一个小的XML索引。 我们得到一个定义这些文件包的CTL文件。 一旦它们在目的地目录中,就有一个操作文件的过程; 当它完成的时候摆脱它们。 rsync会做最好的工作,还是我们需要变得更复杂? 长话如下:
我们有很多来源:一组目录在一台Windows机器上(有Cygwin和SSH守护进程),一整套目录在一组SFTP服务器上(其中大多数也是Windows)。我们的目的地是AIX服务器上的目录列表。
我们曾经在Windows / Cygwin机器上使用非常可靠的Perl脚本,这是我们唯一的来源。 但是,我们正在努力摆脱这台机器,现在还有其他的资源,SFTP服务器,我们目前无法运行我们自己的脚本。
出于安全原因,我们无法在AIX服务器上运行复制作业 – 他们无法访问源服务器。 我们目前在Linux机器上有一个本地Java程序,它使用SFTP从各种新的SFTP源目录中提取,复制到本地tmp目录,validation是否存在,然后将其复制到AIX机器,然后删除这些文件从源头上。 但是,我们发现了任何数量的错误或错误检查处理不当。 我们都不是Java专家,所以修复/改进这可能是困难的。
对我们的关注是:
如果你被提出这个,你会只是编写一些rsync? 或者你会build立或购买一个工具,如果是这样的话,它将会是什么样的(或者它将使用什么技术?)我(和我的团队中的其他人)在Perl上体面。
编辑: Rsync做一个端到端的检查:文件被传输后,它计算目标文件的校验和,并将其与源的校验和进行比较。 当校验和匹配时,只有它宣布传输成功。 这反映在最终退出状态代码中 – 如果所有被转移的文件都通过了testing,则退出代码将为0(成功)。
在类似的设置中,我编写了基于rsync的自己的解决scheme。 这是夜间备份,我们不会自动删除文件。
为了解决您的一些担忧:
--remove-source-files选项)。 find来计算文件数目和du *来获取目录和日志的大小。 基本上你需要在脚本中处理一些事情。 主要是:收集退出状态,一些统计信息,并删除成功传输的源文件。
您可以信任rsync的退出状态,即所有请求的文件都被转移,但是您应该考虑您在源计算机上删除它们之前是否信任脚本,以便为rsync提供正确的文件(源目录)。 也许在源文件和目标文件上find文件(然后检查这些数字是否匹配)将是一个很好的最终检查,然后脚本会自动删除这些文件。
给它10到20次尝试开发和testing你的脚本。 您需要在Windows机器上安装Cygwin和rsync和ssh客户机。
通过了解它是如何工作的,对这样的应用程序感到很自信。 我从来没有使用过商业备份软件 – 但是如果你能find一个坚实的备份软件并相信它 – 那就去做 – 这可以为你节省很多时间。