我尝试以下命令 rsync -av --progress --inplace --rsh ='ssh'/home/tom/workspace/myapp.war root@172.241.181.124:/ home / rtom / uploads
但是当我在应用程序中进行一次重新生成myapp.war的小改动时,它似乎每次执行命令时都会再次传输整个文件。
如果连接丢失,我还希望连接自动恢复。我认为这部分正在发挥作用。
转移应通过ssh进行。
连接速度非常慢并且可能会中断,因此仅传输已更改的内容非常重要。当然,它还必须确保文件被正确传输。
答案 0 :(得分:3)
rsync
可以有效地处理文件中相对较小的更改和部分上传。 rsync algorithm朝着这个方向付出了巨大的努力。
问题是WAR文件是“扩展”的JAR文件,它们本质上是ZIP arhives,因此被压缩。
未压缩文件中的一个小变化将改变该文件所属的整个压缩段,并且 - 最重要的是 - 它还可以显着改变其大小。这可以克服rsync
检测和处理最终压缩文件中的更改的能力。
在ZIP存档上,每个未压缩的文件都有自己的压缩段。因此,将文件放置在存档中的 order 对于实现与先前版本的相似程度也是重要的。根据WAR文件的创建方式,只需添加新文件或重命名文件就可以导致段移动,从而使WAR文件无法识别。换句话说:
您的应用程序中的一个小变化通常意味着您的WAR文件发生了相当大的变化。
rsync
不是为处理压缩文件中的更改而设计的。但是,它可以处理应用程序中的更改。一种解决方案是使用它来上传您的应用程序文件,然后在远程主机上创建WAR文件。
稍微不同的方法 - 在远程主机上不需要任何开发工具 - 将在本地解压缩(即解压缩)WAR文件,上传其内容,然后在远程主机上再次打包(即压缩)。此解决方案仅需要远程主机上的zip
或jar
实现。