概要
backup.sh
特定のディレクトリ以下を毎日バックアップしたいことがある.これを自動化するスクリプトを書いたので紹介する.
ここでは,バックアップの管理をシンプルにすることを目標としている.このため,増分バックアップなどの高度なものは使用せず,tarで固めて圧縮するに留めている.
コード
以下にコードを示す.
#!/bin/sh
init() {
MAX_BACKUPS=20
DST_DIR=~/var/log/svn.repos/
DST_FILE=$DST_DIR/`date +%F`.tar.gz
MYNAME=$0
mkdir -p $DST_DIR
}
chkarg() {
while [ $# -ne 0 ]; do
case $1 in
*)
SRC_DIR=$1
shift
;;
esac
done
if [ ! -d $SRC_DIR ]; then
echo backup-dir $SRC_DIR not found.
exit 1
fi
}
backup() {
tar czf $DST_FILE -C `dirname $SRC_DIR` `basename $SRC_DIR`
i=0
for fname in `ls $DST_DIR/????-??-??.tar.gz | sort -r`; do
[ $i -ge $MAX_BACKUPS ] && rm -f $fname
i=`expr $i \+ 1`
done
}
synopsys() {
echo hoge
}
main() {
init $*
chkarg $*
backup
}
main $*
使い方
シノプシス
$ backup.sh directory
引数にはバックアップする対象のディレクトリを指定する.このディレクトリ以下の全ファイルがバックアップの対象となる.
設定項目
上記コードのinit()内で,以下の変数を初期化する.これらについては,使用者が環境に応じて設定する.
MAX_BACKUPS
保存するバックアップの最大個数.この数を越えると,古いものから削除する.
DST_DIR
バックアップの保存先.この中に最大MAX_BACKUPS個のバックアップファイルを保存する.
cronへの登録
毎日,自動的にバックアップをとらせるには,cronに登録すると良い.「crontab -e」を実行して登録する.
以下は,私のcrontabの記述例である.これにより,subversionのリポジトリ(/svnroot)を日々バックアップする.バックアップは午前1時5分に実行する.
5 1 * * * /path/to/dir/backup.sh /svnroot