Shell基礎學習總結項目-定時備份

微信公眾號:北風中獨行的蝸牛

shell基礎學完了,現在做一個任務,定時備份某一個目錄下的文件,這個需求很常見,為了防止一些文件的丟失或者損毀,我們都應該養成備份的好習慣。

比如說 將
/root/training/shell/data/log 這個目錄下的文件壓縮打包之後定時備份到
/root/training/shell/data/backup這個目錄下,備份的文件要以時間加上backup作為名字,下面開始:

第一步要看源文件是不是存在,不存在就不用繼續了

第二步 看目標文件夾存不存在,如果不存在需要創建出來

第三步獲取當前時間作為文件名

第四步就是壓縮文件並移動到備份的目錄下就可以了。

下面是代碼:

<code> 
TARGET=

"/root/training/shell/data/backup"

SOURCE=

"/root/training/shell/data/log"

SOURCE_DIR=

"/root/training/shell/data"

if

 [ ! -e 

$SOURCE

 ]

then

  

echo

 

"原文件不存在,不需要備份!"

  

exit

 1

fi

if

 [ ! -e 

$TARGET

 ]

then

 mkdir -p 

$TARGET

 

echo

 

"創建備份文件夾"

fi

fileDate=`date +%Y_%m_%d_%H_%M_%S`

echo

 

"日期:

$fileDate

"

fileName=

"

$fileDate

"

_backup.tar.gz

cd

 

$SOURCE_DIR

tar -zcvf 

"

$TARGET

"

/

"

$fileName

"

 ./

log

echo

 

"備份成功"

/<code>

上面的代碼執行就可以備份文件了:

<code>[root@VM_0_11_centos shell] 
創建備份文件夾
日期:

2020_04_24_15_00_51

./

log

/ ./

log

/log1.txt ./

log

/log2.txt 備份成功/<code>

獲取日期用到了日期函數date,具體用法可以百度下,其實就是獲取當前時間以一定的格式顯示出來。還有一個壓縮命令tar ,參數z表示有壓縮屬性,c表示壓縮,v顯示壓縮進程,f表示文件名;解壓的話可以把c換成x,x表示的是解壓

現在壓縮成備份成功了,那麼定時執行怎麼辦呢?用crontab

crontab命令是cron table的簡寫,crond是linux下用來週期性的執行某種任務或等待處理某些事件的一個守護進程,與windows下的計劃任務類似,當安裝完成操作系統後,默認會安裝此服務工具,並且會自動啟動crond進程,crond進程每分鐘會定期檢查是否有要執行的任務,如果有要執行的任務,則自動執行該任務。

Linux下的任務調度分為兩類,系統任務調度和用戶任務調度。我們使用的是用戶任務調度,用戶定期要執行的工作,比如用戶數據備份、定時郵件提醒等。所以用戶可以使用 crontab 工具來定製自己的計劃任務。

所有用戶定義的crontab 文件都被保存在 /var/spool/cron目錄中。其文件名與用戶名一致。

我使用的root用戶,那麼編寫的任務就應該放到 /var/spool/cron/root這個文件中。root這個文件內容的格式如下:

<code>minute   hour   day   month   week   

command

/<code>

其中:

minute: 表示分鐘,可以是從0到59之間的任何整數。

hour:表示小時,可以是從0到23之間的任何整數。

day:表示日期,可以是從1到31之間的任何整數。

month:表示月份,可以是從1到12之間的任何整數。

week:表示星期幾,可以是從0到7之間的任何整數,這裡的0或7代表星期日。

command:要執行的命令,可以是系統命令,也可以是自己編寫的腳本文件。

星號(*):代表所有可能的值,例如month字段如果是星號,則表示在滿足其它字段的制約條件後每月都執行該命令操作。

逗號(,):可以用逗號隔開的值指定一個列表範圍,例如,“1,2,5,7,8,9”

中槓(-):可以用整數之間的中槓表示一個整數範圍,例如“2-6”表示“2,3,4,5,6”

正斜線(/):可以用正斜線指定時間的間隔頻率,例如“0-23/2”表示每兩小時執行一次。同時正斜線可以和星號一起使用,例如/10,如果用在minute字段,表示每十分鐘執行一次。

明白了規則之後我們怎麼添加呢?

<code>

crontab

 

[-u username]

         

-e

      (編輯工作表)     

-l

      (列出工作表裡的命令)     

-r

      (刪除工作作)/<code>

好了我們先試驗一下,添加一行語句,每隔兩分鐘執行備份一次,先編寫一條語句,如下:

<code>*

/2 * * * *  /bin

/sh  /root

/training/shell

/shell_backup.sh

/<code>

接著使用crontab的命令,調用出root文件的編輯頁面,

<code>

crontab

 -u root -e/<code>

將上面的語句複製進去,之後保存就可以!等兩分鐘之後看下備份目錄下是不是有備份的文件了,已經有了

<code>

[root@VM_0_11_centos

 

backup]#

 

ll

total

 

8

-rw-r--r--

 

1

 

root

 

root

 

172

 

Apr

 

24

 

15

:54

 

2020_04_24_15_54_01_backup.tar.gz

-rw-r--r--

 

1

 

root

 

root

 

172

 

Apr

 

24

 

15

:56

 

2020_04_24_15_56_01_backup.tar.gz

/<code>

停止的話,在使用crontab -u root -e 這個命令到root文件,把那個命令刪除或者修改成其他的就可以了!

shell基礎學習結束了,Game Over !

入門雖然結束了,但是Linux中其實還是有很多命令的需要我們學習,剩下的就是遇到什麼問題,就去學習和查資料吧, 問度娘,問Google,只有不斷遇到問題,解決問題,日積月累並總結才能一點一點的進步!只要保持一顆敬畏和學習的心,只要一直是向上的,哪怕現在還在谷底,也有站在山頂的那一天,與君共勉!

參考文檔:

https://www.cnblogs.com/peida/archive/2013/01/08/2850483.htmlhttps://www.cnblogs.com/newcaoguo/p/5896975.html


Shell基礎學習總結項目-定時備份


分享到:


相關文章: