这是我在实际工作中的经验总结:
服务器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这个目录也被排除了。
如果这篇文章对你有帮助的话,欢迎点赞收藏哦。