工具介绍
inotify-tools
inotify - tools 是一个基于 Linux 内核的 inotify 机制开发的工具集,包含两个主要的命令行工具:inotifywait
和inotifywatch. inotifywait
用于等待文件系统的特定事件,它会阻塞执行,直到监控的事件发生,比如文件创建,删除,更新等,等到监控的事件发生后,就执行相应的操作。inotifywatch`用于收集文件系统事件的统计信息,比如在一段时间内某个目录下发生了多少次文件修改等。
rsync
rsync 是linux系统中一个功能强大的文件同步工具。它不仅可以在本地的不同目录之间,还可以通过网络在不同的主机之间同步文件和目录。它通过比较源文件和目标文件的差异部分,只传输有变化的部分,从而大大提高了同步的效率。
编写同步脚本
本地同步
本地同步的脚本如下:
#!/bin/bash
# 源目录
SOURCE_DIR="/source/dir"
# 目标目录
DEST_DIR="/destination/dir"
inotifywait -mrq -e create,delete,close_write $SOURCE_DIR |
while read line; do
rsync -avz --delete $SOURCE_DIR $DEST_DIR
done
远程同步
与本地同步不同,远程同步首先需要在远程机器上配置和开始rsync服务。
配置和开启rsync服务
在 /etc/rsyncd.conf 文件下面添加添加以下内容:
pid file=/var/lock/subsys/pidfile
lock file=/var/lock/subsys/rsync
log file=/var/log/rsync
uid=nobody
gid=nogroup
fake super = yes
timeout=1000
address=0.0.0.0
# 允许连接到rsync的最大连接数
max connections=199
[rulesDir] # 定义模块
# 模块对应的目的目录
path=${destDir}
list=no
use chroot=yes
read only=no
# rsync连接的用户
auth users=xxx
# rsync连接的密码
secrets file=/etc/rsyncd.pwd
#允许同步的网段
hosts allow=`192.168.1.0/24`
配置完后,启动rsyncd服务:
systemctl start rsyncd
远程同步脚本
inotifywait -mrq -e create,delete,close_write $SOURCE_DIR |
while read line; do
rsync -avz --delete $dir ${rsync_user}@$remote_host::${rsync_module} --password-file=${rsync_password}
done