cronで特定ディレクトリを世代バックアップ
2011年10月12日MySQL、Postgresqlに続いてディレクトリのバックアップ。
/home/sites以下に、ドメイン単位でディレクトリを作成している為、そのバックアップを目的としている。
[shell]
#/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
[/shell]
後は、cronで設定後運用する。
除外ディレクトリを設定できるので、除外したいディレクトリがあればそこへ指定する