diff --git a/vmbackup.sh b/vmbackup.sh index 96b6c64..18a1440 100755 --- a/vmbackup.sh +++ b/vmbackup.sh @@ -3,21 +3,26 @@ set -e set -u -statusfile=/var/run/zabbix/vmbackup.status -outputdir=/mnt/backups/vms +statusfile=/home/cig/vmbackup.status +basedir=/mnt/backups/vms _exit () { - echo $1 > $outputdir + echo $1 > $statusfile exit $1 } -if [ ! -d $outputdir ] ; then - echo outputdir not mounted +_mail () { + echo "$@" | mail -s "$(hostname -f) : vm backup error" root +} + +mount /mnt/backups &> /dev/null + +if [ ! -d $basedir ] ; then + _mail Dir $basedir not mounted _exit 41 fi -outputdir=${outputdir}/$(date -I) -mkdir -p ${outputdir} +outputdir=${basedir}/$(date -I) if [ $# -ne 1 ] ; then echo "Usage: $O vm" @@ -31,13 +36,23 @@ function checkRunning { return $? } -machine=$1 -if ( checkRunning $machine ) ; then +machine=$1 +if ( checkRunning $machine ) ; then + mkdir -p ${outputdir} + cp -ar ${basedir}/current/. --target-directory=${outputdir} + mv ${basedir}/current ${basedir}/old + ln -s ${outputdir} ${basedir}/current + test $? -eq 0 || { _mail "erreur de copie" ; _exit 44 ; } vboxmanage controlvm $machine acpipowerbutton shutdown sleep 60 rsync --inplace -a /srv/VM/Win/roofline ${outputdir}/ ret=$? + test $ret -eq 0 || _mail "rsync error $ret" vboxmanage startvm $machine + ln -s ${outputdir} ${basedir}/current + test $ret -eq 0 && find ${basedir} -maxdepth 1 -type d -mtime +7 -exec echo rm -fr {} \; + umount /mnt/backups &> /dev/null _exit $ret fi +_mail "vm $machine not running" _exit 43