由备份不能正常执行所想到的

 

 
问题:
某台机器的备份脚本不能定期执行 , 具体表现为备份脚本运行一段时间之后 , 备份目录 /home/dbbackup 被删除 , 导致备份无法正常完成
 
基本情况:
机器无被入侵迹象

备份脚本共有两个 :A-bck.sh B-bck.sh 分别对项目 A B 的数据进行备份 , 分别在 0 点和 1 点执行
 
其中 A-bck.sh 是我之前所写 , 已经执行了很长时间没有问题
B-bck.sh 是同事最近所写 , 在执行了一段时间之后出现这样的问题
 
脚本说明:
1.
脚本 A-bck.sh 的内容是将 A 项目的备份都放在 /home/dbbackup/
定期删除 7 天之前的文件 , 删除命令写的是 find /home/dbbackup/ -mtime +7 |xargs rm -r
 
2.
后来同事为 B 项目写备份脚本 B-bck.sh, 内容参照我的原脚本
为了区分项目 , 他将 A B 两个项目的备份分开放在 /home/dbbackup/A/ /home/dbbackup/B/ , 并按此修改了我的备份脚本 A-bck.sh 中的备份路径
但是脚本里面的定期删除命令并没改 , 仍然是 find /home/dbbackup/ -mtime +7 |xargs rm -r
 
问题原因分析:
每次脚本运行 , 备份文件都是产生在 "/home/dbbackup/ 项目目录/ "
系统里面标识有改动的就是 " 文件 " "/home/dbbackup/ 项目目录 "( 通过 ll 命令查看改动日期这两个的修改时间会变化 ), 系统认为 "/home/dbbackup " 目录并没有改动 (ll 命令显示此目录的改动日期不变 )
所以当同事将项目分了目录的 7 天过后 , 脚本运行 find /home/dbbackup/ -mtime +7 出来的结果含有 "/home/dbbackup/", 所以此目录就被删除语句给直接删掉了
 
解决办法:
将删除语句改为
find /home/dbbackup/A/*.* -mtime +7 |xargs rm �Cr
find /home/dbbackup/B/*.* -mtime +7 |xargs rm -r
即将 find 细化到项目文件下 , 这样就保证搜索出来的都是特定目录下的文件了
 
原理:
一个多级目录 /A/B/C/ , 如果 C 下产生 , 修改 , 新建 , 删除文件或者目录 , 那么修改时间 ( 1l 命令显示的时间 ) 会变化的是 C,
上级目录 A B 的修改时间并不会改变
举例 : 假设 10 天前 , 建好目录结构 /A/B/C/, 并设置好备份任务 , C 目录下每天产生备份文件 , 名称为 1,2,3 依次累加 , 到今天产生到文件 10
那么使用 find /A/B/  -mtime +7 查找修改时间在 7 天之前的文件 , 结果为
/A/B/( 其修改时间是10 天前, 也在查找的范围内)
1,2,3( 这是7 天前产生的文件)
注意 C 不在 , 因为每天产生一个备份文件 ,C 的修改时间随之更新
 
要达到只删除文件的目的 , 就需要具体到目录 find /A/B/C/ -mtime +7 或者更加明确到文件 find /A/B/C/* -mtime +7
 
教训:
每次修改脚本的时候 , 必须测试 .
这次就是因为同事在修改我脚本的时候 , 并没有测试我的脚本 .( 因为我的脚本一直运行正常 , 他只是修改了一个目录而已 , 大意的认为没有问题 )
 
 
 
 
 
 
 
 
 
 

你可能感兴趣的:(备份,职场,find,休闲)