Rsync备份结合 inotify实时监控--------江南月,清夜满西楼

客户端实时监控

一、利用inotify进行实时监控

1.1、什么是inotify

Inotify 是一个 Linux特性,它监控文件系统操作,比如读取、写入和创建。Inotify 反应灵敏,用法非常简单,并且比 cron 任务的繁忙轮询高效得多。

1.2、inotify常用参数

-m 持续监控
-r 递归
-q 静默,仅打印时间信息
--timefmt 指定输出时间格式
--format 指定事件输出格式
    %Xe 事件
    %w 目录
    %f 文件
-e 指定监控的事件
    access 访问
    modify 内容修改
    attrib 属性修改
    close_write 修改真实文件内容
    open 打开
    create 创建
    delete 删除
    umount 卸载

1.3、下载inotify

# yum -y install inotify-tools

二、客户端环境部署

2.1、客户端环境部署思路

1.创建rsync备份模块
2.将需要备份的文件打包压缩到rsync备份模块
3.生成密钥文件到备份模块中
4.将备份模块中文件同步到服务端
5.删除客户端超过7天以上的文件。

2.2、设置变量

DIR=/backup
dirname=/etc
HOSTNAME=$(hostname)
IP=$(hostname -i)
DATE=$(date +%F)
SRC=$DIR/${HOSTNAME}_${IP}_${DATE}
export RSYNC_PASSWORD=123456

2.3、配合inotify进行实时监控

/usr/bin/inotifywait -mrq --format ‘%Xe %w %f‘ -e create,delete,close_write,attrib,modify $dirname | while read line

2.4、判断备份模块是否存在,不存在则创建

[ -d $SRC ] || mkdir -p $SRC

2.5、将需要备份的文件进行打包压缩

tar -zcPf $SRC/conf.tar.gz $(/usr/bin/find $dirname -type f )

2.6、将打包的文件生成密钥2.6、将打包的文件生成密钥

md5sum $SRC/conf.tar.gz > $SRC/flag_$DATE

2.7、将备份的文件同步到服务端

rsync -az $DIR/ rsync_backup@rsync::backup

2.8、删除超过7天的文件

find /backup -type f -mtime +7 | xargs rm -rf

客户端实时监控脚本

#!/bin/bash
DIR=/backup
dirname=/etc
HOSTNAME=$(hostname)
IP=$(hostname -i)
DATE=$(date +%F)
SRC=$DIR/${HOSTNAME}_${IP}_${DATE}
export RSYNC_PASSWORD=123456
/usr/bin/inotifywait -mrq --format ‘%Xe %w %f‘ -e create,delete,close_write,attrib,modify $dirname | while read line
do
		[ -d $SRC ] || mkdir -p $SRC
		tar -zcPf $SRC/conf.tar.gz $(/usr/bin/find $dirname -type f )
		md5sum $SRC/conf.tar.gz > $SRC/flag_$DATE
		rsync -az $DIR/ rsync_backup@rsync::backup
		# contab -e "0 1 * * * /usr/bin/bash /root/rsync_client.sh"
		find /backup -type f -mtime +7 | xargs rm -rf
done

三、服务端监控客户端同步的文件是否有误

3.1、服务端监控部署思路

1.校验客户端同步的加密文件,是否正确
2.出现错误时发送邮件通知管理员
3.删除服务端超过6个月的文件
4.将服务端监控脚本写入定时任务执行

3.2、校验客户端同步的加密文件

md5sum -c $DIR/nfs_${IP}_${DATE}/flag_$DATE >> $DIR/nfs_${IP}_${DATE}/md5sum.txt

3.3、判断加密文件是否正确并发送邮件

# 如果发现校验文件错误,发送邮件通知管理员
if [ $? -ne 0 ];then
	mail -s "校验文件" 411946773@qq.com < $DIR/nfs_${IP}_${DATE}/md5sum.txt &>/dev/null
	rm -rf $DIR/nfs_${IP}_${DATE}/flag_$DATE
	[ $? -eq 0 ] && echo "邮件已发送"
fi

3.4、删除超过6个月的文件

find $DIR -type f -mtime +180 | xargs rm -rfv

3.5、将脚本加入到定时任务

echo "00 07-20/1 * * * /usr/bin/bash /root/rsync_server.sh" >> /var/spool/cron/root

3.6、服务端脚本

#!/bin/bash
#部署服务端rsync,接收客户端推送过来的备份数据
DIR=/backup
HOSTNAME=$(hostname)
IP="172.16.1.31"
DATE=$(date +%F)
SRC=$DIR/${HOSTNAME}_${IP}_${DATE}
#校验服务端推送过来的数据是否完整
if [ -d $DIR/nfs_${IP}_${DATE} ];then
	if [ ! -f $DIR/*${DATE}/flag_${DATE} ];then
		continue 
	fi
	md5sum -c $DIR/nfs_${IP}_${DATE}/flag_$DATE 
	if [ $? -ne 0 ];then
		rm -rf $DIR/nfs_${IP}_${DATE}
		echo "$DIR/nfs_${IP}_${DATE}校验文件失败" | mail -s "校验失败" 411946773@qq.com 
		[ $? -eq 0 ] && echo "邮件已发送"
	fi
fi
find $DIR -type f -mtime +180 | xargs rm -rfv
grep "00 07 * * * /usr/bin/bash /root/rsync_server.sh" /var/spool/cron/root
if [ $? -ne 0 ];then
echo "00 07 * * * /usr/bin/bash /root/rsync_server.sh" >> /var/spool/cron/root
fi

Rsync备份结合 inotify实时监控--------江南月,清夜满西楼

上一篇:YsoSerial 工具常用Payload分析之Common-Collections7(四)


下一篇:C# windows 服务 操作实例