运行 Ubuntu 12.04,我的工作软件“生产”在某些文件夹上,然后我通常将我制作的文件复制到我执行以下操作的另一个路径“部署”。
例如,有时我会生成一些文件,/home/user/develop
并且我也希望它们能够访问/media/ntfs
。另外,例如,我正在工作,但如果我正在测试网络内容,/home/user/develop
我希望他们去。/var/www
因此,应复制任何最后生成的文件夹或任何给定的文件列表。
我首先认为这是关于符号链接的,但我认为这不是最好的方法,脚本?
答案1
rsync
在目录甚至不同服务器之间同步内容。它具有包含/排除支持等。如果您希望内容真正同步自动地,然后,您可以使用所需的任何参数运行 rsync。
您可以将命令及其所有参数放入脚本中,然后...
如果您希望脚本以给定的时间间隔进行复制,您可以在计划的作业中运行该脚本,或者您可以在需要同步时手动运行该脚本,最后,您可以侦听相关目录上的文件系统事件,使用inotify
,在目录中发生某些更改时运行 rsync。
您可以通过在 inotify 上阻塞的 while 循环来完成此操作,或者使用专门用于执行此类操作的特殊程序/脚本,例如:
rsync-inotify:http://code.google.com/p/rsync-inotify/
同步:http://code.google.com/p/lsyncd/
等等...
答案2
您可以使用以下命令将目录复制到另一个目录同步。 Rsync 不会复制目标目录中已有的具有相同内容(或更准确地说,具有相同日期和大小)的文件。
rsync -a /home/user/develop/ /var/www/
实时更新实时服务器并不是一个好主意:如果您正在进行更改并且文件未处于工作状态,则您不想部署它们。请注意,rsync 的传播也不是瞬时的,因此会有一小段时间窗口,在此期间一些新文件就位,但一些旧文件仍然存在。
版本控制会解决这个问题,并且还会以其他方式帮助您。当您进行更改后,请提交它们。在实时服务器中,进行更新(或获取或无论您的版本控制软件如何称呼它)。版本控制维护更改历史记录,并允许您跨多个系统跟踪更改。