cronで特定ディレクトリを世代バックアップ

MySQL、Postgresqlに続いてディレクトリのバックアップ。

/home/sites以下に、ドメイン単位でディレクトリを作成している為、そのバックアップを目的としている。

 


#/bin/sh

#----------------------------------------------------------------------

# Hostring Directory full-Backup for cron

#----------------------------------------------------------------------

# $Id$

# Author $Author$

# Date $Date$

# Rev $Rev$

# URL $URL$

#----------------------------------------------------------------------

# ドメインディレクトリ/home/.sites配下のデータを、ドメイン単位でまとめて

# 圧縮する

# パーミッションや、所有者情報は保持したままなので万が一の場合は上書きで

# リストアするだけ

#----------------------------------------------------------------------

 

# SETTINGS ------------------------------------------------------------

# ドメインディレクトリトップ

# ※最後は[ / ]とすること!!

DOMAINDIR="/home/sites/"

 

# バックアップ先ディレクトリ

# ※最後は[ / ]とすること!!

BACKUPDIR="/home/.backup/sites/"

 

# バックアップから除外するディレクトリ

# ドメインディレクトリ直下の以下のディレクトリを対象外とする

NOBACKUP="logs "

 

# バックアップ保存世代数

# ※当日分を含めた過去分バックアップを保存する世代数

# ※過去分バックアップを保存しない場合は1を指定する

BACKUPGEN=8

 

# アーカイバコマンド

ARC='tar zcfp'

 

# ------------------------------------------------------------ SETTINGS

 

 

LANG=C

 

# 現在日時

YMD=`date +%Y%m%d`

 

# 全ドメイン名(site[xx]形式)の取得

for sites in `ls -1 $DOMAINDIR`

do

# ディレクトリ移動

domaindir="${DOMAINDIR}${sites}"

cd $domaindir

 

# $NOBACKUPを除くバックアップ対象ディレクトリをリスト化

target=''

for list in `ls -1`

do

flg=0

for notarget in $NOBACKUP

do

if [ $list == $notarget ]; then

flg=1

fi

done

 

if [ $flg == 0 ]; then

target="${target} $list"

fi

done

 

 

# バックアップ

`$ARC ${BACKUPDIR}${sites}.${YMD}.tgz ${target}`

 

# 前回バックアップをリネーム

cd $BACKUPDIR

OLDBACKUPFILE=`ls *${sites}*.tgz 2>/dev/null`

 

# バックアップ保存世代を超えた古いバックアップを削除

if [ $(ls ${BACKUPDIR}*${sites}*|wc -l) -gt $BACKUPGEN ]; then

OLDBACKUPCNT=`expr $(ls ${BACKUPDIR}*${sites}*|wc -l) - $BACKUPGEN`

for file in `ls -t $BACKUPDIR|tail -n $OLDBACKUPCNT`

do

`rm -f $BACKUPDIR/$file 2>/dev/null`

done

fi

 

done

 

exit 0

 

後は、cronで設定後運用する。

除外ディレクトリを設定できるので、除外したいディレクトリがあればそこへ指定する