最近工作接觸到一些老伺服器,上面檔案需要例行備份,我看在 /etc/Crontab 裡面的寫法沒有 rotate 機制,所以自己稍做修改,大致寫法如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
#!/bin/sh # all www file backup - by roga@roga.tw backup_dir="/home/roga/backup" #這是備份放置的位置 source_dir="/usr/local/apache2/htdocs" #這是檔案放置的位置 MKDIR="$(which mkdir)" TAR="$(which tar)" MV="$(which mv)" # if(!dir){create(new);} test ! -d "$backup_dir/0/" && $MKDIR "$backup_dir/0/" # tar zcv all file $TAR zcPf www.tgz $source_dir $MV www.tgz "$backup_dir/0/" # delete the oldest backup test -d "$backup_dir/10/" && rm -rf "$backup_dir/10" # rotate for int in 9 8 7 6 5 4 3 2 1 0 do if(test -d "$backup_dir"/"$int") then next_int=`expr $int + 1` $MV "$backup_dir"/"$int" "$backup_dir"/"$next_int" fi done exit 0; |
注意:rotate 是很一般的寫法,大家都這樣寫,不過特別要注意的是我有在 tar 加上 P 參數,這樣才能對應絕對路徑,要不然怎麼跑都是錯的。還有,檔案分十個目錄存放,越新的檔案目錄數字越小,當然也可以稍做修改讓存放規則相反。
我都是用cp -u來做的-.-a
有更新再備份
沒更新就放著…..
對磁碟機的損耗比較不會那麼大
我都很偷懶
tar czPf /somewhere/somedata_`/bin/date +\%w`.tar.gz somedata
直接一個禮拜 rotate 一次 XD
不然你要一個月都壓同一個也是可以 /bin/date +\%m