WAHT IS THIS
在这篇博客中,笔者介绍了怎么在Linux中备份文件,使用到的有crontab、tar和shell脚本相关知识。笔者最近在学习中会写一些demo程序,有时候一些误操作会让自己几个小时的成果丢失,例如对其他文件进行误操作,覆盖了其它重要文件,所以就写了几个脚本定时备份重要的文件,保护工作成果。
STEP 1
编写打包文件的脚本。脚本的目的是:将当前目录下重要的文件打包到tarfile.tar.gz中。重要文件需要在脚本中指定,或者给出重要文件的扩展名。以下是打包脚本tarfile.sh的内容:
#!/bin/bash
#Author:kevin
#Version:1.0
#Create time:20161130
#Description:
TARGET="allfile.tar.gz"
SRC="*.c *.sh *.py"
if [ -f $TARGET ]
then
rm $TARGET
echo "delete old file"
fi
tar -zcvf ./$TARGET ./$SRC >> null
if [ $? -eq 0 ]
then
echo "create new tar file success !"
else
echo "create tar file failed!"
fi
printf "\a"
exit 0
在shell脚本中,你可以修改TARGET的值来设定打包后生成的文件名,默认是tarfile.tar.gz,还可以修改SRC的值来设定需要打包的文件。这个脚本中SRC=”*.c *.sh *.py”,意思是,将所有以.c 和.sh以及.py结尾的文件都打包起来。这个脚本可以单独运行,也可以由下面会讲到的总控脚本调用执行。
STEP 2
编写总控脚本。有可能你有多个文件夹中的文件需要备份,但是每个文件夹中的重点文件都不同,所以可以在不同的文件夹中部署不同的tarfile.sh。总控脚本的作用就是一次执行tarfile.sh脚本,将不同文件夹中的重要文件分别打包。以下是总控脚本tarballfile.sh
#!/bin/bash
#Author:kevin
#Version:1.0
#Create time:20161130
#Description:
MYPWD="/media/sf_test/"
TARGET="tarfile.sh"
LOGFILE='logtarfile.log'
cd $PWD
string=`ls -l $PWD | awk '/^d/ {print $NF}' `
record=''
for i in $string
do
echo "---------------------"
cd $MYPWD'/'$i
echo $i
#cd $i
if [ -f $TARGET ]
then
echo "find file "
./$TARGET
else
echo "can not find file"
fi
done
cd $MYPWD
echo -e "[`date '+%Y%m%d-%H:%M'`] :creat backup file " >> $LOGFILE
echo "create log file success"
printf "\a"
exit 0
其中可能根据自己的需要修改一下变量值:
- MYPWD
MYPWD是你总控脚本放置的目录,总控脚本应该放置在所有需要打包的目录的上一级,例如:
这是总目录,总目录下有c语言学习、java学习、python学习的分目录,总控脚本就可以放置在总目录下;MYPWD就是总目录的路径。
- TARGET
TARGET是STEP 1中的脚本的名称,默认是“tarfile.sh”
- LOGFILE
LOGFILE是日志的名称,默认是“logtarfile.log”,可以根据需要修改。
试着执行以下总控脚本,可以看到如下执行结果:
从执行结果可以看出,在c_learning文件夹中放置了tarfile.sh脚本,它就会进行备份,在git_learning中没有放置脚本,它就不进行备份。
可以查看一下日志文件logtarfile.log:
可以看出,成功创建了备份文件。
STEP 3
接下来就是创建一个定时任务,定时执行总控脚本了。
-先安装crontab:yum install crontabs
-添加任务:crontab -e,进入后添加任务选项。
格式:f1 f2 f3 f4 f5 program
当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序
当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行
当 f1 为 /n 时表示每 n 分钟个时间间隔执行一次,f2 为 /n 表示每 n 小时个时间间隔执行一次
当 f1 为 a, b, c,… 时表示第 a, b, c,… 分钟要执行,f2 为 a, b, c,… 时表示第 a, b, c…个小时要执行
例如10分钟定时备份一次就是这样写:
*/10 * * * * /media/sf_test/tarballfile.sh
-启动crontab
service crond start启动服务
service crond stop关闭服务
service crond restart重启服务
至此,定时任务添加完毕,再也不怕误操作文件丢失啦!