我们有多个来源:Windows机器上有一组目录(确实有Cygwin和SSH守护进程),一组SFTP服务器上有一大堆目录(其中大多数也是Windows).我们的目标是AIX服务器上的目录列表.
我们曾经在Windows / Cygwin机器上使用非常可靠的Perl脚本,因为它是我们唯一的来源.但是,我们正在努力摆脱那台机器,现在还有其他来源,SFTP服务器,我们目前无法运行我们自己的脚本.
出于安全原因,我们无法在AIX服务器上运行复制作业 – 它们无法访问源服务器.我们目前在Linux机器上有一个自行开发的Java程序,它使用SFTP从各种新的SFTP源目录,复制到本地tmp目录,验证一切都存在,然后将其复制到AIX机器,然后删除文件来自消息来源.但是,我们发现任何数量的错误或处理不当的错误检查.我们都不是Java专家,因此修复/改进这可能很困难.
对我们的担忧是:
>使用远程源(SFTP),rsync会留下任何仍在写入的文件吗?其中一些文件很大.
>从阅读文档开始,看起来rysnc非常适合在目的地可靠写入之前不删除源代码.有没有人有确认或反驳这一点的经验?
>其他信息我们将关注在文件位于目标目录后对文件进行操作的摄取过程.当我们正在复制它们时,我们不希望它在文件上运行;它等待直到存在小的XML索引文件.我们当前的复制作业应该最后复制XML文件.
>有时网络出现问题,有时SFTP源服务器会对我们产生影响.有时我们输入配置文件并且目标目录不存在.由于这种错误,我们永远不想丢失文件.
>我们需要好日志
如果你看到这个,你会编写一些rsync吗?或者你会建立或购买一个工具,如果是这样,它会是什么(或者它将使用什么技术?)我(和我的团队中的其他人)在Perl上都很不错.
解决方法
在类似的设置中,我编写了基于rsync的自己的解决方案.它用于夜间备份,我们不会自动删除文件.
为了解决您的一些问题:
> Rsync从不修改源端的任何内容(除非使用–remove-source-files选项).
>如果网络长时间停机,Rsync将放弃和give an appropriate exit status.我在我的脚本和特定的退出代码(我在实践中通过日志记录观察)检查这一点我有脚本重新尝试rsync命令3倍.
>是的,您的脚本应该尽可能地记录.时间戳,总运行时间,Rsync存在状态,Rsync –stats输出(传输量).我还在传输结束时运行find来计算文件数量和du *来获取目录的大小并记录它.
基本上你需要在脚本中处理一些事情.主要是:在成功传输时收集退出状态,一些统计信息和删除源文件.
您可以信任rsync的退出状态,即所有请求的文件都已转移,但您应该考虑在您在源计算机上删除它们之前,您对脚本提供了多少rsync以及正确的文件(源目录).在您的脚本自动删除文件之前,可能在源上然后在目标上计算带有find的文件(然后检查这些数字是否匹配)将是一个很好的最终检查.
给它10到20次尝试来开发和测试你的脚本.您需要在Windows计算机上安装带有rsync和ssh客户端的Cygwin.
通过准确了解它的工作原理,对这样的应用程序感到很有信心.我从来没有使用过商业备份软件 – 但是如果你能找到一个坚如磐石的软件并且信任它 – 那就去吧 – 它可以为你节省很多时间.