如何自动同步 CentOS VM 上的文件?

如何自动同步 CentOS VM 上的文件?

我必须不断将文件从 ~/src 复制到 /home/httpd 目录,这在进行前端更改时很麻烦。有没有办法让更改的文件自动同步?——特别是仅在我开发时——我可以打开和关闭它。

答案1

虽然不是自动的,但是一旦完成修改,就可以使用 rsync:

$ rsync -r --delete /home/username/src/ /home/httpd

您甚至可以创建一个别名:

$ alias sync='rsync -r --delete /home/username/src/ /home/httpd'

正如我向大家强调的那样,在使用它之前,您应该检查man rsync其他选项。

另外,我强烈建议版本控制(SVN 版本或者git或许,原因有很多。


编辑:

我个人会使用bash循环---特别是while使用 的循环sleep。在 shell 中输入以下内容:

while true; do 
    sleep 300 # Every 5 minutes
    rsync -r --delete /home/username/src/ /home/httpd
done &

这将使其成为一个您可以随时终止的后台作业。只需键入jobs即可查看作业的索引,当您不再需要它时,请键入kill %(index)

或者,要将命令添加为cron作业(例如每 10 分钟一次),请将以下内容附加到您的 crontab:

*/10 * * * * rsync -r --delete /home/username/src/ /home/httpd

要编辑你的 crontab:

$ crontab -e

答案2

我不完全确定你的目标是什么,但以下几点建议可能会有所帮助:

修改后立即保存: 如果您希望在修改文件后立即更新文件,我可能会问您为什么不直接在 /home/httpd 中进行更改,然后在一切满意后再将它们复制回来。如果要立即复制更改,则工作目录作为保障措施(或防止因错误的编辑而导致网站瘫痪)的想法就毫无意义了。

修改后几乎立即生效: 如果出于某种原因,您希望在文件修改时几乎立即应用更改(即,一旦保存文件,它就会被复制),那么我建议您查看incron。它可以设置为在目录更改时触发脚本。

按需(非即时):

如果您希望完成所有编辑,然后推送更改(我期望您这样做),那么您有几种选择。我推测麻烦在于确定哪些文件被更改,然后从各种不同的目录中复制它们。

Shell 脚本: 一个简单的解决方案是使用rsync。它将确定您的 ~/src 目录中相对于您的 /home/httpd 目录的更改,并进行必要的更改以使您的 /home/httpd 与源目录同步。

版本控制: 最有效的解决方案是版本控制,例如 Subversion,尽管它比 rsync 复杂得多。基本上:

  • 在您的服务器上创建存储库
  • 将文件导入存储库
  • 检出 /home/httpd 的工作副本
  • 设置一个将更新 /home/httpd 的提交后钩子
  • 将工作副本检出到 ~/src
  • 进行更改并将其提交到存储库(svn commit) - 钩子将自动更新 /home/httpd

虽然设置起来比较困难,但最初,这种方法允许最大程度的控制,并且可以让您轻松回滚更改,列出修改后的文件,并查看每次修订时所做的更改(差异) - 您还可以在每次提交时为更改添加描述。

答案3

看着同步。它使用 inotify 获取有关文件更改的信息并通过 rsync 同步它们。

相关内容