1. 程式人生 > >在Linux中定時備份檔案

在Linux中定時備份檔案

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重啟服務

至此,定時任務新增完畢,再也不怕誤操作檔案丟失啦!