远程实时同步文件 linux 上有inotify+rsync,mac上可以用fswatch+rsync
首先mac上通过包管理器brew 安装fswatch brew install fswatch,没有brew的自行去安装brew
有可能下载不下来fswatch,因为brew默认访问的https,对于这种情况,可以先
brew --cache (没有装xcode的还是装下吧) 找到brew的包下载缓存路径 /Library/Caches/Homebrew
然后根据brew install fswatch命令中输出的 现在路径 自己去浏览器下载,修改https为http(没有vpn翻墙的还是翻下吧),下载下来是个tar.gz的包
把下载下来的fswatch复制到 /Library/Caches/Homebrew 中,注意要保持文件名与之前brew install fswatch中输出的文件名一致
否则brew install找不到缓存包又会去下载,然后死循环。。。。
mac自带了rsync工具,我们可以直接使用,同时可以通过脚本控制后台运行,实时监控,我的脚本如下,仅供参考
#!/bin/zsh
fswatch /Users/joker/joker/ | while read file
do
rsync -rltzuq --delete --exclude='.*' /Users/joker/joker/ 10.13.130.70::mmm/
echo "${file} was rsynced" >> /usr/local/var/log/rsync.log 2>&1
done
很简单吧 几句话搞定,我的shell是zsh,如果是用的bash可以改成bash,后面的echo语句是记录日志用的
这里有一个需要注意的地方,确定fswatch 和 rsync命令所在的文件夹 在你shell的配置文件中,我的在~/.zshrc里面
export PATH=/usr/local/bin:/usr/local/sbin:$HOME/bin:/usr/local/bin:$PATH
/User/joker/joker/ 是我需要同步的本地文件
10.13.130.70 是我的远程机器
mmm/ 是我远程机器(linux操作系统)上 /etc/rsync.conf里面定义的模块
贴上rsync.conf的配置
uid = root
gid = root
use chroot = no
max connections = 10
strict modes = yes
log file = /data1/v5.weibo.cn/logs/rsyncd/rsync.log
pid file = /var/run/rsync.pid
[www]
path = /data1/v5.weibo.cn/code/
comment = analyse
read only = false
hosts allow = *
[ttt]
path = /data1/weibo.cn/code/
comment = analyse
read only = false
hosts allow = *
[aaa]
path = /data1/v5_admin/
comment = analyse
read only = false
hosts allow = *
[mmm]
path = /data1/joker/code/
comment = analyse
read only = false
hosts allow = *
看到里面的mmm模块没,path里面的路径就是需要同步的远程机器中的文件夹,我的host allow = * ,所有机器都可以访问,如果需要安全点的话就设置host deny = *
然后在host deny上面另写一行 host allow = 你允许的远程ip
今天配置的时候遇到一个坑,脚本文件里面的rsync命令中 文件路径写成了 /User/joker/joker joker后面没有加/
然后各种同步不到,查两边日志都正常,差点崩溃,后来细看才发现这个问题,如果没有加/的话,默认就是去同步远程机器 /data1/joker/code/ 里面的code文件夹
很明显一万年也不会找到,加了/之后就是同级了,同步本机/User/joker/joker/code/下的所有文件和文件夹
至于rsync的参数,网上一堆,可以根据自己的需要去配置。