这是我在实际工作中的经验总结:

服务器A/servera/media/目录下有

1080p/

360p/

mp3/

image/

m3u8/1080p/

m3u8/360p/

现在想将 mp3/, m3u8/1080p/, m3u8/360p/ 及其子目录同步到服务器B的

/serverb/media/下。其他的不同步。

在服务器A的/data/sh/目录下写rsyncd-media.sh文件。

ps -ef |grep rsync | grep -v grep
if [ $? -eq 0 ]; then echo 正在运行
else echo 没有运行
rm /var/run/rsync-media.lock
echo rsync-media-lock文件已经删除
fi
# 会写日志

flock -xn /var/run/rsync-media.lock -c "rsync -vau --exclude-from='/data/sh/exclude-media.txt' --log-file='/data/sh/rsyncd-media.log'  /servera/media/ --delete root@11.22.333.44:/serverb/media/ -e 'ssh -p 2722'"
chmod 777 /var/run/rsync-media.lock

这段命令的意思:

这段命令的作用是使用 rsync 命令同步 /servera/media/ 目录下的文件到远程服务器的 /serverb/media/ 目录下,并且排除一些文件或目录,同时将日志记录到 /data/sh/rsyncd-media.log 文件中。

其中,/var/run/rsync-media.lock 是用于锁定进程的文件路径。

其中 'ssh -p 2722' 是服务器B的端口号。由于同步是定时执行,所以服务器A到B要设置为免密登录。

最后的 chmod 777 /var/run/rsync-media.lock 命令是为了修改 /var/run/rsync-media.lock 文件的权限,将其设置为可读、可写、可执行。

/data/sh/exclude-media.txt文件中的内容是:

/1080p/
/360p/
/image/

请注意,前面后面一定要有/。

如果您想要排除一级目录的 1080p 目录,而保留二级目录的 /m3u8/1080p 目录,则应使用 /1080p/ 形式的排除规则。

这个没写对的话,就会使m3u8/1080p这个目录也被排除了。

如果这篇文章对你有帮助的话,欢迎点赞收藏哦。