Linux系统中自动备份脚本

要求:将/data目录下的所有文件cp到/var/backups目录下,文件以当天的日期命名。例如(/var/backups/data.20151103)。并且判断前一天的目录中的文件与当天的区别,如果无区别,则删除前一天的备份目录。

# cat auto_bak.sh
#!/bin/bash
 
bak_from_name="data"
bak_from_dir="/data"
bak_to_dir_par="/var/backups"
bak_dir="${bak_to_dir_par}${bak_from_dir}.$(date +%Y%m%d)"
yes_bak_dir="${bak_to_dir_par}${bak_from_dir}.$(date -d '-1 day' +%Y%m%d)"
new_sum_file="${bak_to_dir_par}/new_sum.$bak_from_name.$(date +%Y%m%d)"
old_sum_file="${bak_to_dir_par}/old_sum.$bak_from_name.md5"
 
if [ ! -d $bak_to_dir_par ];then
mkdir $bak_to_dir_par
fi
find $bak_from_dir |xargs -I {} md5sum {} >> $new_sum_file 2>/dev/null
cp -a $bak_from_dir $bak_dir && echo "$bak_from_dir directory to $bak_dir directory backup successfully"
 
new_sum_error=`md5sum -c $new_sum_file 2>/dev/null|awk '$2!~"OK"'|wc -l`
new_sum_ok=`md5sum -c $new_sum_file 2>/dev/null|awk '$2~"OK"'|wc -l`
old_sum_error=`md5sum -c $old_sum_file 2>/dev/null|awk '$2!~"OK"'|wc -l`
old_sum_ok=`md5sum -c $old_sum_file 2>/dev/null|awk '$2~"OK"'|wc -l`
 
if [ $new_sum_error == $old_sum_error -a $new_sum_ok == $old_sum_ok ];then
echo "Because today and yesterday's content is the same, delete the backup content of yesterday"
rm -rf $yes_bak_dir $new_sum_file
fi
echo | cp $new_sum_file $old_sum_file &>/dev/null

变量描述:

bak_from_name:变量为所要备份的目录名
bak_from_dir:变量为所要备份的目录路径
bak_to_dir_par:变量为所要备份到的目录的父(上级)目录路径
bak_dir:变量为所要备份到的目录路径
yes_bak_dir:变量为所要备份目录前一天的备份目录路径
new_sum_file:变量为当天所计算出来的所要备份目录的MD5列表
old_sum_file:变量为当天所计算出来的所要备份目录的MD5列表(此变量的当天是脚本执行之后的当前,在脚本才开始执行的时候,该变量所指定的文件为前一天备份目录的MD5列表)
new_sum_error:变量为当天所要备份目录的MD5发生变化的条目总数
new_sum_ok:变量为当天所要备份目录的MD5未发生变化的条目总数
old_sum_error:变量为前一天所要备份目录的MD5发生变化的条目总数
old_sum_ok:变量为前一天所要备份目录的MD5未发生变化的条目总数
脚本描述:
脚本前一部分是搜寻所要备份目录的每一个文件的md5值,然后记录到当天的所要备份目录的MD5列表文件中,然后执行备份。
后一部分是根据比对当天的所要备份目录的MD5列表文件和前一天的所要备份目录的MD5列表文件中未变化和变化部分的条目值是否相同,来判断所要备份目录中的文件是否有发生变化,以此来决定是否删除前一天的备份。

时间: 2024-10-31 22:53:17

Linux系统中自动备份脚本的相关文章

linux下oracle自动备份脚本

linux下oracle自动备份脚本  vi /home/oracle/backup.sh   //编写脚本 以下为脚本内容 time=` date +"%Y%m%d%H%M" ` //变量time 获取当前系统时间 su - oracle -c "exp hbskjt_0113/password owner=hbskjt_0113 file=/home/oracle/hbskjt_$time.dmp"  //导库脚本 cd /home/oracle tar zcv

Shell脚本实现在Linux系统中自动安装JDK_linux shell

A:本脚本运行的机器,Linux B:待安装JDK的机器, Linux 首先在脚本运行的机器A上确定可以ssh无密码登录到待安装jdk的机器B上,然后就可以在A上运行本脚本: 复制代码 代码如下: $ ./install-jdk.sh B的IP  or: 复制代码 代码如下: $ ./install-jdk.sh "B的IP" "JDK的URI" 就可以在机器B上安装JDK.jdk使用的tar包需要用户自己设定DEFAULT_JDK_SRC=?,保证可以wget得到

linux系统中yunfile文件下载脚本

脚本内存和CPU占用很低! 回答问题时我的脚本已经完成了60%,昨天凌晨加班完成了,使用到了ORC解析验证码,指定只分析数字! 使用前需要安装很多库,如果需要orc识别,还需要需要你的系统安装Tesseract-OCR,系统是linux的话在这里应该能找到编译好的包,老高用mac一句话就装好了brew install tesseract. requirements.txt progressbar == 2.3pyquery == 1.2.9requests == 2.4.3Pillow == 2

linux系统中监控自动化脚本

问题汇总问题1.逐渐告警,问题出现时,第一时候通知XX人,多长时间没解决,通知XXX人 问题2.问题主机出现告警时,想要获取其他相关监控值的情况,如load.cpu等,同时也可能会需要获取到其他会受影响主机的情况. 解决方法问题1 很多开源的监控产品里都有escalations功能,如常见的zabbix .nagios (这个确实是没关注到过的知识点) zabbix根据问题持续的时间发送给不同的人 来处理的配置方法: 例如:  代码如下 复制代码 1 – 5 min  mail to user_

linux下mysql自动备份脚本代码_Mysql

脚本放在 /home/user/mysql_backup.sh crontab # crontab -l # m h dom mon dow command 28 16 * * * /home/user/mysql_backup.sh 脚本如下 复制代码 代码如下: #!/bin/sh # mysql_backup.sh: backup mysql databases and keep newest 5 days backup. # # Last updated: 20 March 2006 #

Windows或Linux系统中备份和恢复MongoDB数据的教程_MongoDB

windows下面mongodb数据库备份和恢复 我可以讲数据备份到c:\data\dump目录下面,首先创建这个路径.然后进入到mongodb的bin目录下面 我的是: C:\Program Files\mongodb\bin 备份脚本是: //备份 mongodump -h 127.0.0.1:27017 -d test -o c:\data\dump 恢复脚本是: //恢复 mongorestore -h 127.0.0.1:27017 -d test --directoryperdb c

如何在 Linux 系统中创建一个云端加密文件系统

如何在 Linux 系统中创建一个云端加密文件系统 Amazon S3 和 Google Cloud Storage 之类的商业云存储服务以能承受的价格提供了高可用性.可扩展.无限容量的对象存储服务.为了加速这些云产品的广泛采用,这些提供商为他们的产品通过明确的 API 和 SDK 培养了一个良好的开发者生态系统.而基于云的文件系统便是这些活跃的开发者社区中的典型产品,已经有了好几个开源的实现. S3QL 便是最流行的开源云端文件系统之一.它是一个基于 FUSE 的文件系统,提供了好几个商业或开

Linux系统中保存可执行文件的执行结果

在Linux操作系统上编译测试脚本文件或者应用程序的时候,往往需要不满足只是将结果输出到屏幕上,而是希望能够将运行结果.错误信息.警告信息等等保存在一个文件中,以方便系统管理员进行分析与调整.虽然这也可以通过屏幕截屏或者屏幕录像来完成,但是这得到的结果处理起来很不方便.如不方便查询.不能够过滤等等.为了解决这个问题,在Linux系统中提供了一个重定向的工具.在编程调试的过程中,可以利用重定向操作来存储可执行文件的输出结果. 一.将输入输出分别重定向到不同的文件. 在程序调试时,屏幕上的信息大致可

Linux系统中的硬件问题如何排查?

这篇教程的诞生过程实在相当纠结.很长时间以来我一直在考虑要不要写这么一篇东西,最主要的原因在于对硬件相关问题进行故障排查可能是计算机管理领域最棘手的工作.即使是经验相当丰富的用户有时也会遇上自己搞不定的状况,并在试图解决那些微妙.古怪.难以捉摸甚至无法确定的软硬件冲突困境时碰上钉子.想在网络上寻找答案?我们找到的很可能是上万个无关主题,最终在空荡荡的论坛上孤独徘徊.耗尽余生. 不过就个人来说,我自认为算是个自负的极客.对技术难题和写作手法都有相当的信心.今天我打算尽量与大家分享一些实用的技巧与处