*** empty log message ***

This commit is contained in:
François Pinard
1994-11-16 02:49:08 +00:00
parent e48945daa4
commit edac55a3b9
3 changed files with 172 additions and 109 deletions

View File

@@ -8,139 +8,191 @@
#
# You must edit the file `backup-specs' to set the parameters for your site.
# Useful for backup-specs, in case things have to be done slightly
# differently for different dump levels.
DUMP_LEVEL=1
# Insure `mail' is in PATH.
PATH="/usr/ucb:${PATH}"
export PATH
# This is not the most reliable test in the world. The following might be
# more predictable:
#
# whoami="`whoami`"
# euid="`sed -ne '/^'\"${whoami}\"':/{s/^[^:]*:[^:]*://;s/:.*//p;q;}' /etc/passwd`"
# if [ "${euid}" != 0 ]; then ...
#
if [ ! -w / ]; then
echo The backup must be run as root,
echo or else some files will fail to be dumped.
echo "The backup must be run as root or else some files will fail to be dumped."
exit 1
else
false
fi
# Get the values of BACKUP_DIRS and BACKUP_FILES, and other variables.
# Get the values of BACKUP_DIRS, BACKUP_FILES, and other variables.
. ./backup-specs
# Maybe sleep until around specified or default hour.
#
if [ "$1" != "now" ]; then
if [ "$1"x != x ]; then
spec=$1
if [ "z${1}" != "znow" ]; then
if [ "${1}x" != "x" ]; then
spec="${1}"
else
spec=$BACKUP_HOUR
spec="${BACKUP_HOUR}"
fi
pausetime=`date | awk '{hr=substr($4,1,2);\\
mn=substr($4,4,2);\\
if((hr+0)<spec+0)\\
print 3600*(spec-hr)-60*mn;\\
else\\
print 3600*(spec+(24-hr))-60*mn; }' spec=$spec`
pausetime="`date | awk '
{
hr = substr($4, 1, 2);
mn = substr($4, 4, 2);
if((hr + 0) < (spec + 0))
print 3600 * (spec - hr) - 60 * mn;
else
print 3600 * (spec + (24 - hr)) - 60 * mn;
}' spec=\"${spec}\"`"
clear
cat ./dont_touch
sleep $pausetime
echo "${SLEEP_MESSAGE}"
sleep "${pausetime}"
fi
# start doing things
here=`pwd`
LOGFILE=log-`date | awk '{print $2 "-" $3 "-" $6}'`-level-1
HOST=`hostname | sed 's/\..*//'`
TAR_PART1="/usr/local/bin/tar -c --multi-volume --one-file-system --block=$BLOCKING --sparse --volno-file=$VOLNO_FILE"
#TAR_PART1="/usr/local/bin/tar -c --multi-volume --one-file-system --block=$BLOCKING "
# Put startdate in the subject line of mailed report, since if it happens
# to run longer than 24 hours (as may be the case if someone forgets to put
# in the next volume of the tape in adequate time), the backup date won't
# appear too misleading.
startdate="`date`"
here="`pwd`"
# Logfile name should be in the form ``log-1993-03-18-level-1''
# i.e. year-month-date. This format is useful for sorting by name, since
# logfiles are intentionally kept online for future reference.
LOGFILE=log-`date | awk '
BEGIN {
d["Jan"] = "01"; d["Feb"] = "02"; d["Mar"] = "03";
d["Apr"] = "04"; d["May"] = "05"; d["Jun"] = "06";
d["Jul"] = "07"; d["Aug"] = "08"; d["Sep"] = "09";
d["Oct"] = "10"; d["Nov"] = "11"; d["Dec"] = "12";
}
{
if ($3 < 10) $3 = "0" $3;
print $6 "-" d[$2] "-" $3;
}'`-level-${DUMP_LEVEL}
localhost="`hostname | sed -e 's/\..*//'`"
TAR_PART1="/usr/local/bin/tar -c --multi-volume --one-file-system --block=${BLOCKING} --sparse --volno-file=${VOLNO_FILE}"
# Only use --info-script if DUMP_REMIND_SCRIPT was defined in backup-specs
if [ "x${DUMP_REMIND_SCRIPT}" != "x" ]; then
TAR_PART1="${TAR_PART1} --info-script='${DUMP_REMIND_SCRIPT}'"
fi
# Make sure the log file did not already exist. Create it.
if [ -f $LOGFILE ] ; then
echo Log file $LOGFILE already exists.
if [ -f "${LOGFILE}" ] ; then
echo "Log file ${LOGFILE} already exists." 1>&2
exit 1
else
touch $LOGFILE
touch "${LOGFILE}"
fi
mt -f $TAPE_FILE rewind
rm $VOLNO_FILE
# Most everything below here is run in a subshell for which all output is
# piped through `tee' to the logfile. Doing this, instead of having
# multiple pipelines all over the place, is cleaner and allows access to
# the exit value from various commands more easily.
(
# Caveat: Some version of `mt' require `-t', not `-f'.
mt -f "${TAPE_FILE}" rewind
rm -f "${VOLNO_FILE}"
set $BACKUP_DIRS
while [ $# -ne 0 ] ; do
host=`echo $1 | sed 's/:.*$//'`
fs=`echo $1 | sed 's/^.*://'`
date=`date`
fsname=`echo $1 | sed 's/\//:/g'`
set - ${BACKUP_DIRS}
while [ $# -ne 0 ] ; do
date="`date`"
remotehost="`echo \"${1}\" | sed -e 's/:.*$//'`"
fs="`echo \"${1}\" | sed -e 's/^.*://'`"
fsname="`echo \"${1}\" | sed -e 's/\//:/g'`"
# This filename must be absolute; it is opened on the machine that runs tar.
TAR_PART2="--listed=/etc/tar-backup/temp.level-1"
TAR_PART3="--label='level 1 backup of $fs on $host at $date' -C $fs ."
# This filename must be absolute; it is opened on the machine that runs tar.
TAR_PART2="--listed=/etc/tar-backup/temp.level-1"
TAR_PART3="--label='level 1 backup of ${fs} on ${remotehost} at ${date}' -C ${fs} ."
echo Backing up $1 at $date | tee -a $LOGFILE
echo Last full dump on this filesystem: | tee -a $LOGFILE
echo "Backing up ${1} at ${date}"
echo "Last full dump on this filesystem:"
if [ $HOST != $host ] ; then
rsh $host "ls -l /etc/tar-backup/$fsname.level-0; \
cp /etc/tar-backup/$fsname.level-0 /etc/tar-backup/temp.level-1" \
2>&1 | tee -a $LOGFILE
else
ls -l /etc/tar-backup/$fsname.level-0 2>&1 | tee -a $LOGFILE
cp /etc/tar-backup/$fsname.level-0 /etc/tar-backup/temp.level-1 2>&1 | tee -a $LOGFILE
fi
if [ "z${remotehost}" != "z${localhost}" ] ; then
rsh "${remotehost}" "ls -l /etc/tar-backup/${fsname}.level-0; \
cp /etc/tar-backup/${fsname}.level-0 /etc/tar-backup/temp.level-1"
else
ls -l "/etc/tar-backup/${fsname}.level-0"
cp "/etc/tar-backup/${fsname}.level-0" /etc/tar-backup/temp.level-1
fi
# Actually back things up.
# Actually back things up.
if [ $HOST != $host ] ; then
rsh $host $TAR_PART1 -f $HOST:$TAPE_FILE $TAR_PART2 $TAR_PART3 2>&1 | tee -a $LOGFILE
else
# Using `sh -c exec' causes nested quoting and shell substitution
# to be handled here in the same way rsh handles it.
sh -c "exec $TAR_PART1 -f $TAPE_FILE $TAR_PART2 $TAR_PART3" 2>&1 | tee -a $LOGFILE
fi
if [ $? -ne 0 ] ; then
echo Backup of $1 failed. | tee -a $LOGFILE
if [ "z${remotehost}" != "z${localhost}" ] ; then
rsh "${remotehost}" ${TAR_PART1} -f "${localhost}:${TAPE_FILE}" ${TAR_PART2} ${TAR_PART3}
else
# Using `sh -c exec' causes nested quoting and shell substitution
# to be handled here in the same way rsh handles it.
sh -c "exec ${TAR_PART1} -f \"${TAPE_FILE}\" ${TAR_PART2} ${TAR_PART3}"
fi
# `rsh' doesn't exit with the exit status of the remote command. What
# stupid lossage. TODO: think of a reliable workaround.
if [ $? -ne 0 ] ; then
echo "Backup of ${1} failed."
# I'm assuming that the tar will have written an empty
# file to the tape, otherwise I should do a cat here.
else
if [ "z${localhost}" != "z${remotehost}" ] ; then
rsh "${remotehost}" mv -f /etc/tar-backup/temp.level-1 "/etc/tar-backup/${fsname}.level-1"
else
mv -f /etc/tar-backup/temp.level-1 "/etc/tar-backup/${fsname}.level-1"
fi
fi
${TAPE_STATUS}
sleep 60
shift
done
# Dump any individual files requested.
if [ "x${BACKUP_FILES}" != "x" ] ; then
date="`date`"
TAR_PART2="--listed=/etc/tar-backup/temp.level-1"
TAR_PART3="--label='Incremental backup of miscellaneous files at ${date}'"
echo "Backing up miscellaneous files at ${date}"
echo "Last full dump of these files:"
ls -l /etc/tar-backup/misc.level-0
rm -f /etc/tar-backup/temp.level-1
cp /etc/tar-backup/misc.level-0 /etc/tar-backup/temp.level-1
# Using `sh -c exec' causes nested quoting and shell substitution
# to be handled here in the same way rsh handles it.
sh -c "exec ${TAR_PART1} -f \"${TAPE_FILE}\" ${TAR_PART2} ${TAR_PART3} ${BACKUP_FILES}"
if [ $? -ne 0 ] ; then
echo "Backup of miscellaneous files failed." 1>&2
# I'm assuming that the tar will have written an empty
# file to the tape, otherwise I should do a cat here.
else
if [ $HOST != $host ] ; then
rsh $host mv -f /etc/tar-backup/temp.level-1 /etc/tar-backup/$fsname.level-1 2>&1 | tee -a $LOGFILE
else
mv -f /etc/tar-backup/temp.level-1 /etc/tar-backup/$fsname.level-1 2>&1 | tee -a $LOGFILE
fi
fi
$TAPE_STATUS | tee -a $LOGFILE
sleep 60
shift
done
else
mv -f /etc/tar-backup/temp.level-1 /etc/tar-backup/misc.level-1
fi
${TAPE_STATUS}
else
echo "No miscellaneous files specified"
fi
# Dump any individual files requested.
# Caveat: some versions of `mt' use `-t' instead of `-f'.
mt -f "${TAPE_FILE}" rewind
mt -f "${TAPE_FILE}" offl
if [ x != "x$BACKUP_FILES" ] ; then
date=`date`
TAR_PART2="--listed=/etc/tar-backup/temp.level-1"
TAR_PART3="--label='Incremental backup of miscellaneous files at $date'"
) 2>&1 | tee -a "${LOGFILE}"
echo Backing up miscellaneous files at $date | tee -a $LOGFILE
echo Last full dump of these files: | tee -a $LOGFILE
ls -l /etc/tar-backup/misc.level-0 2>&1 | tee -a $LOGFILE
echo "Sending the dump log to ${ADMINISTRATOR}"
mail -s "Results of backup started ${startdate}" ${ADMINISTRATOR} < "${LOGFILE}"
rm -f /etc/tar-backup/temp.level-1 2>&1 | tee -a $LOGFILE
cp /etc/tar-backup/misc.level-0 /etc/tar-backup/temp.level-1 2>&1 | tee -a $LOGFILE
echo Backing up miscellaneous files at $date | tee -a $LOGFILE
# Using `sh -c exec' causes nested quoting and shell substitution
# to be handled here in the same way rsh handles it.
sh -c "exec $TAR_PART1 -f $TAPE_FILE $TAR_PART2 $TAR_PART3 \
$BACKUP_FILES" 2>&1 | tee -a $LOGFILE
if [ $? -ne 0 ] ; then
echo Backup of miscellaneous files failed. | tee -a $LOGFILE
# I'm assuming that the tar will have written an empty
# file to the tape, otherwise I should do a cat here.
else
mv -f /etc/tar-backup/temp.level-1 /etc/tar-backup/misc.level-1 2>&1 | tee -a $LOGFILE
fi
$TAPE_STATUS | tee -a $LOGFILE
else
echo No miscellaneous files specified | tee -a $LOGFILE
false
fi
mt -f $TAPE_FILE rewind
mt -f $TAPE_FILE offl
echo Sending the dump log to $ADMINISTRATOR
cat $LOGFILE | sed -f logfile.sed > $LOGFILE.tmp
/usr/ucb/mail -s "Results of backup on `date`" $ADMINISTRATOR < $LOGFILE.tmp
# eof