Snapsend:

* Send an email for the daily snapshot with the log in content
  * Add the hostname in the mail's subject (async and daily)
This commit is contained in:
gardouille 2014-11-20 14:30:29 +01:00
parent 8d48656d2f
commit cb520c65ef

View File

@ -13,11 +13,14 @@ DATASETS="datastore/vm"
# Destination host for snapshot replication # Destination host for snapshot replication
# The user must have enought rights to use `zfs command` # The user must have enought rights to use `zfs command`
DHOST="root@192.168.42.52" DHOST="root@192.168.0.100"
# Output logfile # Output logfile
LOGFILE="/var/log/snapsend/snapsend.log" LOGFILE="/var/log/snapsend/snapsend.log"
# Temp file for mail content
TEMP_MAIL="/var/log/snapsend/temp.mail"
# Tools that help implement snapshot logic (and transfer soon according the pull-requests) # Tools that help implement snapshot logic (and transfer soon according the pull-requests)
ZSNAP="/usr/local/bin/zfSnap.sh" ZSNAP="/usr/local/bin/zfSnap.sh"
@ -79,6 +82,7 @@ usage()
if [ ! -f "${LOGFILE}" ]; then if [ ! -f "${LOGFILE}" ]; then
mkdir -p $(dirname ${LOGFILE}) mkdir -p $(dirname ${LOGFILE})
touch "${LOGFILE}" touch "${LOGFILE}"
touch "${TEMP_MAIL}"
fi fi
case "${interval}" in case "${interval}" in
@ -105,10 +109,10 @@ case "${interval}" in
# Send the snapshot the remote host # Send the snapshot the remote host
# zfs send -I datastore/vm@2014-11-17_11.26.22--1h datastore/vm@2014-11-18_14.19.10--1h | ssh nec02.ipr.univ-rennes1.fr zfs recv datastore/vm # zfs send -I datastore/vm@2014-11-17_11.26.22--1h datastore/vm@2014-11-18_14.19.10--1h | ssh nec02.ipr.univ-rennes1.fr zfs recv datastore/vm
zfs send -I "${DHOSTSNAP}" "${dset}@${LOCALSNAP}" | ssh "${DHOST}" zfs recv "${dset}" zfs send -I "${DHOSTSNAP}" "${dset}@${LOCALSNAP}" | ssh "${DHOST}" zfs recv "${dset}"
printf ' ... done\n' >> $LOGFILE printf ' ... DONE\n' >> $LOGFILE
else else
# Mail admin # Mail admin
printf 'ERROR snapshot %s does not exist on the local system\n' ${DHOSTSNAP} | mail ${MAILADMIN} -s 'snapsend_error' printf 'ERROR snapshot %s does not exist on the local system\n' ${DHOSTSNAP} | mail ${MAILADMIN} -s "snapsend_error $(hostname -f)"
printf 'ERROR snapshot %s for %s does not exist on the local system\n' ${DHOSTSNAP} ${dset} >> $LOGFILE printf 'ERROR snapshot %s for %s does not exist on the local system\n' ${DHOSTSNAP} ${dset} >> $LOGFILE
fi fi
@ -120,7 +124,7 @@ case "${interval}" in
zfs rename ${dset}@${DHOSTSNAP} ${dset}@${PREFIXSNAP}${DHOSTSNAP} zfs rename ${dset}@${DHOSTSNAP} ${dset}@${PREFIXSNAP}${DHOSTSNAP}
else else
# Mail admin # Mail admin
printf 'ERROR snapshot %s for %s does not exist on the remote host (%s)\n' ${LOCALSNAP} ${dset} ${DHOST} | mail ${MAILADMIN} -s 'snapsend_error' printf 'ERROR snapshot %s for %s does not exist on the remote host (%s)\n' ${LOCALSNAP} ${dset} ${DHOST} | mail ${MAILADMIN} -s "snapsend_error $(hostname -f)"
printf 'ERROR snapshot %s for %s does not exist on the remote host (%s)\n' ${LOCALSNAP} ${dset} ${DHOST} >> $LOGFILE printf 'ERROR snapshot %s for %s does not exist on the remote host (%s)\n' ${LOCALSNAP} ${dset} ${DHOST} >> $LOGFILE
fi fi
done done
@ -141,12 +145,19 @@ case "${interval}" in
# take snapshots, keep for one week # take snapshots, keep for one week
for dset in $DATASETS for dset in $DATASETS
do do
$ZSNAP -v -s -S -a 1w $dset >> $LOGFILE $ZSNAP -v -s -S -a 1w $dset >> $TEMP_MAIL
done done
# Purge snapshots according to TTL # Purge snapshots according to TTL
$ZSNAP -v -s -S -d -p ${PREFIXSNAP} >> $LOGFILE $ZSNAP -v -s -S -d -p ${PREFIXSNAP} >> $TEMP_MAIL
printf '\n' >> $LOGFILE printf '\n' >> $TEMP_MAIL
# Send email to admin
cat $TEMP_MAIL | mail ${MAILADMIN} -s "Daily snapshot $(hostname -f)"
# Send the previous log to the main logfile
cat ${TEMP_MAIL} >> ${LOGFILE}
rm -f ${TEMP_MAIL}
;; ;;
'weekly' ) 'weekly' )