背景
如果要实现两台服务器的文件的热备份,要怎么做呢?使用shell脚本可以轻松实现。
分析
实现文件实时监控的命令为:inotifywait。
当文件有新增、修改、删除等操作时,这个文件监控就会触发事件,来通知你。
文件同步的命令为:rsync。
这个可以将文件从一台服务器快速同步到另外一台服务器。
将inotifywait 和 rsync 结合起来就可以实现实时同步的热备效果了。
下面是完整的脚本:
#!/bin/bash
CONFIG_FILE="config.txt"
读取配置文件,格式为:源目录:目标目录
read_config_file() {
while IFS=: read -r source_dir target_dir; do
if [[ $source_dir && $target_dir ]]; then
inotifywait -m -r -e modify,create,delete "$source_dir" |
while read path action file; do
rsync -avz "source_dir/" root@目标IP:"target_dir/"
done &
fi
done < "$CONFIG_FILE"
}
主函数入口
main() {
if [[ -f "$CONFIG_FILE" ]]; then
read_config_file
else
echo "配置文件 $CONFIG_FILE 不存在."
fi
}
执行主函数
main
配置文件config.txt:
/data/sync/watched:/data/sync/watched
总结
文件实时同步,借助inotifywait 和 rsync 就可以轻松实现。