客户端实时监控
一、利用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实时监控--------江南月,清夜满西楼