cronで特定ディレクトリを世代バックアップ
2011年10月12日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で設定後運用する。
除外ディレクトリを設定できるので、除外したいディレクトリがあればそこへ指定する