123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256 |
- SYSCONFDIR=${SYSCONFDIR-@sysconfdir@}
- . ${LIBPATH-@libexecdir@}/backup.sh
- now() {
- date +%Y-%m-%d
- LC_ALL=C date | \
- sed 's/[^ ]* *\([^ ]*\) *\([^ ]*\).* \([^ ]*\)$/\3-\1-\2/
- /-[0-9]$/s/\([0-9]\)$/0\1/
- /Jan/{s/Jan/01/p;q;}
- /Feb/{s/Feb/02/p;q;}
- /Mar/{s/Mar/03/p;q;}
- /Apr/{s/Apr/04/p;q;}
- /May/{s/May/05/p;q;}
- /Jun/{s/Jun/06/p;q;}
- /Jul/{s/Jul/07/p;q;}
- /Aug/{s/Aug/08/p;q;}
- /Sep/{s/Sep/09/p;q;}
- /Oct/{s/Oct/10/p;q;}
- /Nov/{s/Nov/11/p;q;}
- /Dec/{s/Dec/12/p;q;}'
- }
- DUMP_LEVEL=0
- TIME=
- usage() {
- cat - <<EOF
- usage: $PROGNAME [OPTIONS] [WHEN]
- Options are:
- -l, --level LEVEL Do backup level LEVEL (default $DUMP_LEVEL).
- -f, --force Force backup even if today's log file already
- exists.
- -v, --verbose LEVEL Set verbosity level.
- -t, --time TIME Wait till TIME, then do backup.
- Informational options:
- -h, --help Display this help message.
- -l, --license Display program license.
- -V, --version Display program version.
- Optional argumen WHEN is for backward compatibility only. It has been
- superseded by --time option.
- TIME argument can be one of:
- now -- do backup immediately.
- HH -- do backup at HH hours.
- HH:MM -- do backup at HH:MM.
- Send bug reports to @PACKAGE_BUGREPORT@.
- EOF
- }
- case "$PROGNAME" in
- level-[0-9]) DUMP_LEVEL=`expr $PROGNAME : 'level-\([0-9][0-9]*\)'`;;
- esac
- while [ $
- do
- case $1 in
- -l|--l|--le|--lev|--leve|--level)
- shift
- DUMP_LEVEL=$1
- ;;
- -v|--verb|--verbo|--verbos|--verbose)
- shift
- VERBOSE=$1
- ;;
- -V|--v|--ve|--ver|--vers|--versi|--versio|--version)
- echo "backup; @PACKAGE@ (@VERSION@)"
- exit 0;;
- -L|--li|--lic|--lice|--licen|--licens|--license)
- license
- exit;;
- -t|--ti|--tim|--time)
- shift
- TIME=$1
- ;;
- -f|--f|--fo|--for|--forc|--force)
- FORCE=yes
- ;;
- -h|--h|--he|--hel|--help)
- usage
- exit;;
- *) if [ "x$TIME" != "x" ]; then
- bailout "Extra argument. Try $PROGNAME --help for more info."
- else
- TIME=$1
- fi;;
- esac
- shift
- done
- if [ "x$TIME" = x ]; then
- bailout "No backup time specified. Try $PROGNAME --help for more info."
- exit 1
- fi
- init_backup
- wait_time $TIME
- if [ $DUMP_LEVEL -ne 0 ]; then
- PREV_LEVEL=`expr $DUMP_LEVEL - 1`
- PREV_DATE=`ls -t ${LOGPATH}/log-*-level-$PREV_LEVEL|
- head -1|
- sed "s,${LOGPATH}/log-\(.*\)-level.*,\1,"`
- if [ "x$PREV_DATE" = x ]; then
- bailout "Can't determine date of the previous backup"
- fi
- message 0 "Backup from $PREV_DATE to $NOW"
- fi
- if [ "x$FORCE" = "xyes" ]; then
- rm ${LOGFILE}
- fi
- if [ -f "${LOGFILE}" ] ; then
- bailout "Log file ${LOGFILE} already exists."
- else
- touch "${LOGFILE}"
- fi
- message 1 "Ready for backup."
- message 10 "TAR invocation: $TAR_PART1"
- message 20 "Variables:"
- message 20 "BACKUP_DIRS=$BACKUP_DIRS"
- message 20 "BACKUP_FILES=$BACKUP_FILES"
- (
- message 1 "preparing tapes"
- $MT_BEGIN "${TAPE_FILE}"
- rm -f "${VOLNO_FILE}"
- message 1 "processing backup directories"
- set - ${BACKUP_DIRS}
- while [ $
- date="`date`"
- fs="`echo \"${1}\" | sed -e 's/^.*://'`"
- fsname="`echo \"${1}\" | sed -e 's/\//:/g'`"
- remotehost="`expr \"${1}\" : '\([^/][^/]*\):.*'`"
- if [ -z "$remotehost" ]; then
- remotehost=$localhost
- fi
-
- echo "Backing up ${1} at ${date}"
- message 10 "fs=$fs"
- message 10 "fsname=$fsname"
- message 10 "remotehost=$remotehost"
- if [ $DUMP_LEVEL -eq 0 ]; then
- make_level_log ${remotehost}
- else
- LF=`level_log_name ${fsname} 0`
- pdate=`remote_run "${remotehost}" ls -l $LF | awk '{
- printf("%s", $6)
- for (i=7;i<NF;i++)
- printf(" %s", $i)
- print "" }'`
- echo "Last `prev_level` dump on this filesystem was on $pdate"
- remote_run "${remotehost}" cp $LF "`level_log_name temp`"
- fi
-
- backup_host ${remotehost} \
- "--listed=`level_log_name temp`" \
- "--label='`print_level` backup of ${fs} on ${remotehost} at ${date}'" \
- -C ${fs} .
-
-
- if [ $? -ne 0 ] ; then
- echo "Backup of ${1} failed." 1>&2
-
-
- else
- flush_level_log ${remotehost} ${fsname}
- fi
- ${MT_STATUS}
- echo "sleeping ${SLEEP_TIME} seconds"
- sleep ${SLEEP_TIME}
- shift
- done
-
- if [ "x${BACKUP_FILES}" != "x" ] ; then
- message 1 "processing individual files"
- date="`date`"
- make_level_log $localhost
- echo "Backing up miscellaneous files at ${date}"
-
- backup_host $localhost \
- "--listed=`level_log_name temp`"\
- "--label='`print_level` backup of miscellaneous files at ${date}'" \
- ${BACKUP_FILES}
- if [ $? -ne 0 ] ; then
- echo "Backup of miscellaneous files failed."
-
-
- else
- flush_level_log $localhost
- fi
- ${MT_STATUS}
- else
- echo "No miscellaneous files specified"
- fi
- message 1 "final cleanup"
- $MT_REWIND "${TAPE_FILE}"
- $MT_OFFLINE "${TAPE_FILE}"
- ) 2>&1 | tee -a "${LOGFILE}"
- echo "Sending the dump log to ${ADMINISTRATOR}"
- mail -s "Results of backup started ${startdate}" ${ADMINISTRATOR} < "${LOGFILE}"
|