backup:/s0/backup# cat backup.sh
#!/bin/bash
TIMESTAMP=`date +%F_%R_%s | sed s/:/=/`
ARCH="-j" # bz2 or gz
VERB=""
help_usage ()
{
echo -e "Usage: $0 [jzblixvh]
-j - Use bzip2 for archive backup [default]
-z - Use gzip for archive backup
-t <TYPE_OF_BACKUP> - Define type of backup inc - incremental or full - for full backup
-f <CONFIG_FILE> - Define file which contains configuration
-b <BACKUP NAME> - name backup (use \"default\" for $BACKUP_NAME)
-v - verbose [non default]
-h - print this help"
}
if [[ $# -eq 0 ]]
then
help_usage
exit 0
fi
while getopts ":jzb:vhd:x:l:f:t:" Option
do
case $Option in
j )
ARCH="-j"
;;
z )
ARCH="-z"
;;
d )
INSTALL_DIR="${OPTARG}"
;;
t )
TYPE_OF_BACKUP="${OPTARG}"
if [[ ${TYPE_OF_BACKUP} = "inc" || ${TYPE_OF_BACKUP} = "full" ]]
then :
else
echo "Use -t only for \"full\" or \"inc\" type of backup"
exit 0
fi
;;
b )
if [[ $OPTARG != "default" ]]
then
BACKUP_NAME="${OPTARG}"
fi
;;
l )
BACKUP_LIST="${OPTARG}"
;;
x )
EXCLUDE_LIST="${OPTARG}"
;;
f )
CONF_FILE="${OPTARG}"
if [[ -e "${CONF_FILE}" ]]
then
. "${CONF_FILE}"
else
echo "Can't find ${CONF_FILE}. Used valid"
fi
;;
v )
VERB="-v"
;;
h )
help_usage
exit 0
;;
* )
help_usage
exit 0
;;
esac
done
shift $(($OPTIND - 1))
if [[ ! -e ${BACKUP_LIST} ]]
then
echo "Edit conf file to to define list of backup files"
exit 0;
fi
if [[ ! -e ${EXCLUDE_LIST} ]]
then
echo "Edit conf file to to define list of exclude files"
exit 0;
fi
remote_hostname=$(ssh $SSH_CONN_OPT $REMOTE_USER@$REMOTE_HOST hostname)
if [[ "$TYPE_OF_BACKUP" == "inc" ]]
then
DATE_TIME=$(ls -1 -t ${LOCAL_DIR}/backup* | head -n 1 | grep -E -o "[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}=[0-9]{2}")
INC_TIME=$(echo ${DATE_TIME} | grep -E -o "[0-9]{4}-[0-9]{2}-[0-9]{2}")
INC_TIME="${INC_TIME} $(echo ${DATE_TIME} | grep -E -o '[0-9]{2}=[0-9]{2}' | sed s/\=/:/)"
BACKUP_NAME="backup_${remote_hostname}_${TYPE_OF_BACKUP}_${TIMESTAMP}"
;
ADV_OPT="--newer-mtime '${INC_TIME}'"
else
BACKUP_NAME="backup_${remote_hostname}_${TYPE_OF_BACKUP}_${TIMESTAMP}"
;
fi
if [[ "${ARCH}" == "-j" ]]
then
BACKUP_NAME="${BACKUP_NAME}.tar.bz2"
else
BACKUP_NAME="${BACKUP_NAME}.tar.gz"
fi
COMM="tar --create --ignore-failed-read ${ARCH} \
${VERB} --file="${REMOTE_DIR}/${BACKUP_NAME}" `cat ${BACKUP_LIST}` \
$(for entity in `cat ${EXCLUDE_LIST}`; do echo '--exclude' ${entity}; done) \
--exclude ${REMOTE_DIR} ${ADV_OPT}"
echo "Start make ${TYPE_OF_BACKUP} backup to ${BACKUP_NAME}"
echo "use ${ARCH} to archive"
ssh ${SSH_CONN_OPT} ${REMOTE_USER}@${REMOTE_HOST} ${COMM}
echo "End backup"
echo "Start copy backup to local machine"
scp ${SCP_CONN_OPT} ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR}/${BACKUP_NAME} ${LOCAL_DIR}
echo "End copy"
echo "Begin delete remote copy"
COMM="rm -f ${REMOTE_DIR}/${BACKUP_NAME}"
ssh ${SSH_CONN_OPT} ${REMOTE_USER}@${REMOTE_HOST} ${COMM}
echo "End delete"
echo "Delete obsolete"
find $LOCAL_DIR -mtime "+$EXPIRE_TIME" -name "backup.*.tar.*" -exec rm -f {} \;
echo "End delete"
backup:/s0/backup# cat serv/serv.conf
#
# Config file for backup serv server
#
REMOTE_HOST="192.168.0.1"
REMOTE_USER="root"
BACKUP_LIST="/s0/backup/serv/list.backup"
EXCLUDE_LIST="/s0/backup/serv/list.exclude"
REMOTE_DIR="/bk"
LOCAL_DIR="/s0/backup/serv"
EXPIRE_TIME="7" #in days
TYPE_OF_BACKUP="full"
SSH_CONN_OPT="-p 22"
SCP_CONN_OPT="-P 22"
tugrik ★★
13.12.05 13:17:06 MSK