Linux shell script自動每日備份語法

我想請問在Linux底下的Shell script備份語法。我是想搭配cron job自動排程來實現自動備份功能。我先講一下我的環境:

1.我的Linux系統是CentOS 5.x版

上面跑的是論壇程式,所以每天都會有人發帖,代表每天都有新帖和附件。

2.每天的附件會依照日期,自動生成day_110420, day_110421, day_110422...etc (後面數字代表2011年04月21日)

我的備份需求:

1.每天凌晨01:00執行備份。(這點我可以透過Linux的cron job去排程)

2.在備份開始前,要先確認系統的日期(時間不用確認),例如目前是2011年04月5日,則備份day_110404目錄。雖然當天是5號,但5號當天還沒結束,所以不備份5號當天的目錄,只備份前一天。(注意:當天只會備份昨天的資料,並不會包含前天以及更之前的目錄)

3.若今日是5號,在系統中找不到day_110404目錄,則不備份。(這點簡單說,就是找不到昨天日期的資料夾,則不備份)希望有Linux shell scipt高手能幫忙。

Update:

To Evan.Tuning,

謝謝你告知可以用rsync,我剛照著你的方法執行了一次,的確是可以在我指定的目的目錄裡面,備份來源目錄的資料夾。

可是我是希望打包並壓縮成一個檔案,副檔名通常是tgz or tar.gz這種。

我的原意是每天都有一個tar包,這樣以後還原的時候,我只要傳輸一個tar包即可。

會需要打包的原因,是因為我在遠端的主機備份之後,會利用ftp傳輸回另一端,而另一端是Widnows機器,並不能執行rsync,所以才想要將遠端機器上的備份用打包的方式進行。

1 Answer

Rating
  • 10 years ago
    Favorite Answer

    你的系統已經幫你把日期都調好了,就不用複雜的 shell script 來算日期,直接用 rsync 來差異備份就可以了,如此雖然連5號的也都有備份,但是,6號時,仍然會對5號產生的檔案作差異備份,甚至你可以訂每小時備份一次。rsync 還可以用來異地備份,但設定稍嫌「空靈」,在此不研究。

    例:

    # rsync -avzog SOURCE_DIR TARGET_DIR

    另外要注意的是資料庫也要備份。要下資料庫 dump 的指令。

    例如 mysql 要用 mysqldump。

    2011-05-17 11:02:26 補充:

    還是針對原來的需求,寫看看下面的程式

    作天的寫法(http://www.cyberciti.biz/tips/linux-unix-get-yeste...

    # date --date="1 days ago" +%y%m%d

    110516

    變數指派

    # BACKUP_DIR=day_"`date --date="1 days ago" +%y%m%d`"

    判斷目錄是否存在,若是 tar 起來

    # test -d $BACKUP_DIR && tar -zcvf $BACKUP_DIR.tgz $BACKUP_DIR

    2011-05-17 11:03:51 補充:

    日期校正部分,啟動 ntpd ,讓它自動時間校正吧!

Still have questions? Get your answers by asking now.