Rev 4 | Blame | Compare with Previous | Last modification | View Log | RSS feed
#!/bin/bash
#
# This script will do various backups of Zimbra depending on which you choose,
# most of them are cold backups except the msg backup which hot copies the 'store'
# folder for possible individual mail retrieval. Be sure to change the variables below
# to point to where you got the Zimbra folder and where you want it to be backed up to.
#
# This script must be run as root or a user with equal privileges or it will not work.
#
# When you run this script via crontab be sure to add '> /dev/null 2>&1' at the end
# of the script like below or the tar command will fail for no apparent reason.
# 00 12 * * * oZimbraBackup.sh --full > /dev/null 2>&1
#
# As of 2008-04-16 this script uses some extra software to extend this script,
# the scripts standard function will still function without these extra software's but if you
# intend to use this scripts built in file transfer functions you must install the described software below.
#
# Required software: rsync for normal operation and ftp or scp & expect for file transfer capabillities.
#
# Bits and pieces was adopted from a script created by Daniel W. Martin, 9 Sept 2007
# Licensed under BSDL license, see license.txt for information.
#
# Developer: oSource Development(as of 2009-07-01)
# DevTeam: Marcus Uddenhed
# Version: 1.0.7
# Updated: 2016-04-01 15:30
#
#### Global Settings ####
ZimInstPath=/opt # Installation path for Zimbra, excluding the Zimbra folder.
ZimHome=zimbra # The Zimbra installation folder, excluding path to folder.
ZimBackupPath=/opt/backup # Root folder for backup where backup files will be placed.
#### Log Settings ####
ZimLogEnable=yes # Turns logging on or off(yes/no).
ZimLogLogRotate=no # Enables log rotating(yes/no)
ZimLogRotateInt=day # How often should we rotate logs(day, week or month)
ZimLogPath=/opt/backup/logs # Folder for log files
ZimLogVerbose=no # Activates extra logging information(yes/no)
#### File Transfer Settings ####
# Enable Services (yes/no)
ZimFtpEnable=no # Enable/Disable ftp file transfer(yes/no)
ZimScpEnable=no # Enable/Disable scp file transfer(yes/no)
# Extra FTP Settings
ZimFtpOpt='' # Extra options for ftp file transfer, see manual for ftp command
# Extra SCP Settings
ZimScpOpt='' # Extra options for scp file transfer, see manual for scp command
# Common Settings
ZimFilehostUser= # Username for file transfers
ZimFilehostPass= # Password for file transfers
ZimFilehostAddress= # Host address for file transfers
ZimFilehostFolder= # Folder on host where files will be placed during file transfer
#### File Delete Settings ####
ZimDeleteLocalFile=no # Enable/Disable compressed backup file deletion after successful backup(yes/no)
ZimDeleteTimeSet=0 # Set in minutes above 0 to keep a desired amount of files locally,
# be sure to match the time with your backup schedules.
##### Do not change anything below this line unless you know what you are doing #####
# Fetch backup type
ZimBackupType=$1
pre_check() {
# Set default abort value
ZimAbort=0
# Check for rsync
if [ ! -e /usr/bin/rsync ]
then
echo "Cannot find rsync software..."
ZimAbort=1
fi
# Check for tar
if [ ! -e /bin/tar ]
then
echo "Cannot find tar software..."
ZimAbort=1
fi
# Check for gzip
if [ ! -e /bin/gzip ]
then
if [ ! -e /usr/bin/gzip ]
then
echo "Cannot find gzip software..."
ZimAbort=1
fi
fi
# Check if expect, ftp & scp is installed when file transfer is set to yes
if [ $ZimFtpEnable = 'yes' ] || [ $ZimScpEnable = 'yes' ]
then
if [ ! -e /usr/bin/expect ]
then
echo "cannot find expect command..."
ZimAbort=1
fi
if [ $ZimFtpEnable = 'yes' ]
then
if [ ! -e /usr/bin/ftp ]
then
echo "Cannot find ftp command..."
ZimAbort=1
fi
fi
if [ $ZimScpEnable = 'yes' ]
then
if [ ! -e /usr/bin/scp ]
then
echo "Cannot find scp command..."
ZimAbort=1
fi
fi
fi
if [ $ZimAbort = '1' ]
then
echo "Please install above software, script exiting..."
exit
fi
}
pre_load() {
# Get temporary folder layout
temp_folders
# Get backup file format
backup_file
# Get log file format
log_file
# Check to see if the backup folder exist, create if not
mkdir -p $ZimBackupPath
# Check which zimbra version that is installed, for recovery purposes
sudo -u zimbra $ZimInstPath/$ZimHome/bin/zmcontrol -v > $ZimBackupPath/zimbra_version.txt
}
full_backup() {
# Cleaning LDAP database from backup folder if exist.
if [ -f "$ZimDiffTmpPath/$ZimHome/data/ldap/mdb/db/data.mdb" ];
then
rm $ZimDiffTmpPath/$ZimHome/data/ldap/mdb/db/data.mdb
fi
# Making backup
if [ $ZimLogEnable = 'yes' ] && [ $ZimLogVerbose = 'yes' ]
then
# Hot sync before shutdown on zimbra folder
echo "`date "+%Y-%m-%d %H:%M:%S"` - Hot syncing to backup folder..." >> $ZimLogFile
rsync -avHK --delete --exclude 'data/ldap/mdb/db/data.mdb' $ZimInstPath/$ZimHome $ZimFullTmpPath >> $ZimLogFile
echo "`date "+%Y-%m-%d %H:%M:%S"` - Hot syncing to backup folder done." >> $ZimLogFile
# Stopping Zimbra
zimbra_stop
# Cold sync of zimbra folder
echo "`date "+%Y-%m-%d %H:%M:%S"` - Cold syncing to backup folder..." >> $ZimLogFile
rsync -avHK --delete --exclude 'data/ldap/mdb/db/data.mdb' $ZimInstPath/$ZimHome $ZimFullTmpPath >> $ZimLogFile
# Special LDAP DB copying needed.
$ZimInstPath/$ZimHome/openldap/bin/mdb_copy $ZimInstPath/$ZimHome/data/ldap/mdb/db $ZimFullTmpPath/$ZimHome/data/ldap/mdb/db >> $ZimLogFile
echo "`date "+%Y-%m-%d %H:%M:%S"` - Cold syncing to backup folder done." >> $ZimLogFile
# Starting Zimbra
zimbra_start
# Compressing backup for space reduction
echo "`date "+%Y-%m-%d %H:%M:%S"` - Compressing backup folder..." >> $ZimLogFile
tar -zcvpf $ZimBackupPath/$ZimBackupFile -C $ZimBackupPath tf zimbra_version.txt >> $ZimLogFile
echo "`date "+%Y-%m-%d %H:%M:%S"` - Compressed backup folder." >> $ZimLogFile
# Cleaning differential folder.
echo "`date "+%Y-%m-%d %H:%M:%S"` - Cleaning differential backup folder..."
rm -r -f $ZimDiffTmpPath/* >> $ZimLogFile
echo "`date "+%Y-%m-%d %H:%M:%S"` - Cleaned differential backup folder."
else
# Hot sync before shutdown on zimbra folder
rsync -avHK --delete --exclude 'data/ldap/mdb/db/data.mdb' $ZimInstPath/$ZimHome $ZimFullTmpPath
# Stopping Zimbra
zimbra_stop
# Cold sync of zimbra folder
rsync -avHK --delete --exclude 'data/ldap/mdb/db/data.mdb' $ZimInstPath/$ZimHome $ZimFullTmpPath
# Special LDAP DB copying needed.
$ZimInstPath/$ZimHome/openldap/bin/mdb_copy $ZimInstPath/$ZimHome/data/ldap/mdb/db $ZimFullTmpPath/$ZimHome/data/ldap/mdb/db
# Starting Zimbra
zimbra_start
# Compressing backup for space reduction
tar -zcvpf $ZimBackupPath/$ZimBackupFile -C $ZimBackupPath tf zimbra_version.txt
# Cleaning differential folder.
rm -r -f $ZimDiffTmpPath/*
fi
}
diff_backup() {
# Checking if LDAP database folder exist and fix it.
if [ ! -f "$ZimDiffTmpPath/$ZimHome/data/ldap/mdb/db/data.mdb" ];
then
if [ ! -d "$ZimDiffTmpPath/$ZimHome/data/ldap/mdb/db" ]
then
mkdir -p $ZimDiffTmpPath/$ZimHome/data/ldap/mdb/db
fi
else
rm -R $ZimDiffTmpPath/$ZimHome/data/ldap/mdb/db/data.mdb
fi
# Make backup
if [ $ZimLogEnable = 'yes' ] && [ $ZimLogVerbose = 'yes' ]
then
# Hot syncing to backup folder
echo "`date "+%Y-%m-%d %H:%M:%S"` - Hot syncing to backup folder..." >> $ZimLogFile
rsync -avHK --exclude 'data/ldap/mdb/db/data.mdb' --compare-dest=$ZimFullTmpPath/ $ZimInstPath/$ZimHome $ZimDiffTmpPath >> $ZimLogFile
echo "`date "+%Y-%m-%d %H:%M:%S"` - Hot syncing to backup folder done." >> $ZimLogFile
# Stopping Zimbra
zimbra_stop
# Cold syncing to backup folder
echo "`date "+%Y-%m-%d %H:%M:%S"` - Cold syncing to backup folder..." >> $ZimLogFile
rsync -avHK --exclude 'data/ldap/mdb/db/data.mdb' --compare-dest=$ZimFullTmpPath/ $ZimInstPath/$ZimHome $ZimDiffTmpPath >> $ZimLogFile
# Special LDAP DB copying needed.
$ZimInstPath/$ZimHome/openldap/bin/mdb_copy $ZimInstPath/$ZimHome/data/ldap/mdb/db $ZimDiffTmpPath/$ZimHome/data/ldap/mdb/db >> $ZimLogFile
echo "`date "+%Y-%m-%d %H:%M:%S"` - Cold syncing to backup folder done." >> $ZimLogFile
# Starting Zimbra
zimbra_start
# Compressing backup folder
echo "`date "+%Y-%m-%d %H:%M:%S"` - Compressing backup folder..." >> $ZimLogFile
tar -zcvpf $ZimBackupPath/$ZimBackupFile -C $ZimBackupPath td zimbra_version.txt >> $ZimLogFile
echo "`date "+%Y-%m-%d %H:%M:%S"` - Compressing backup folder done." >> $ZimLogFile
else
# Hot sync before shutdown on zimbra folder
#rm -R $ZimDiffTmpPath/*
rsync -avHK --exclude 'data/ldap/mdb/db/data.mdb' --compare-dest=$ZimFullTmpPath/ $ZimInstPath/$ZimHome $ZimDiffTmpPath
# Stopping Zimbra
zimbra_stop
# Cold sync of zimbra folder
rsync -avHK --exclude 'data/ldap/mdb/db/data.mdb' --compare-dest=$ZimFullTmpPath/ $ZimInstPath/$ZimHome $ZimDiffTmpPath
# Special LDAP DB copying needed.
$ZimInstPath/$ZimHome/openldap/bin/mdb_copy $ZimInstPath/$ZimHome/data/ldap/mdb/db $ZimDiffTmpPath/$ZimHome/data/ldap/mdb/db
# Starting Zimbra
zimbra_start
# Compressing backup for space reduction
tar -zcvpf $ZimBackupPath/$ZimBackupFile -C $ZimBackupPath td zimbra_version.txt
fi
}
msgfull_backup() {
if [ $ZimLogEnable = 'yes' ] && [ $ZimLogVerbose = 'yes' ]
then
# Hot syncing to backup folder
echo "`date "+%Y-%m-%d %H:%M:%S"` - Hot syncing to backup folder..." >> $ZimLogFile
rsync -avHK --delete $ZimInstPath/$ZimHome/store $ZimMsgFullTmpPath >> $ZimLogFile
echo "`date "+%Y-%m-%d %H:%M:%S"` - Hot syncing to backup folder done." >> $ZimLogFile
# Compressing backup folder
echo "`date "+%Y-%m-%d %H:%M:%S"` - Compressing backup folder..." >> $ZimLogFile
tar -zcvpf $ZimBackupPath/$ZimBackupFile -C $ZimBackupPath tmf zimbra_version.txt >> $ZimLogFile
echo "`date "+%Y-%m-%d %H:%M:%S"` - Compressing backup folder done." >> $ZimLogFile
echo "`date "+%Y-%m-%d %H:%M:%S"` - Cleaning differential backup folder..."
rm -r -f $ZimMsgDiffTmpPath/* >> $ZimLogFile
echo "`date "+%Y-%m-%d %H:%M:%S"` - Cleaned differential backup folder."
else
# Hot syncing to backup folder
rsync -avHK --delete $ZimInstPath/$ZimHome/store $ZimMsgFullTmpPath
# Compressing backup folder
tar -zcvpf $ZimBackupPath/$ZimBackupFile -C $ZimBackupPath tmf zimbra_version.txt
# Cleaning differential folder
rm -r -f $ZimMsgDiffTmpPath/*
fi
}
msgdiff_backup() {
if [ $ZimLogEnable = 'yes' ] && [ $ZimLogVerbose = 'yes' ]
then
# Cleaning backup folder
#echo "`date "+%Y-%m-%d %H:%M:%S"` - Cleaning backup folder..." >> $ZimLogFile
#rm -r -f $ZimMsgDiffTmpPath/* >> $ZimLogFile
#echo "`date "+%Y-%m-%d %H:%M:%S"` - Cleaning backup folder done." >> $ZimLogFile
# Hot syncing to backup folder
echo "`date "+%Y-%m-%d %H:%M:%S"` - Hot syncing to backup folder..." >> $ZimLogFile
rsync -avHK --compare-dest=$ZimMsgFullTmpPath/ $ZimInstPath/$ZimHome/store $ZimMsgDiffTmpPath >> $ZimLogFile
echo "`date "+%Y-%m-%d %H:%M:%S"` - Hot syncing to backup folder done." >> $ZimLogFile
# Compressing backup folder
echo "`date "+%Y-%m-%d %H:%M:%S"` - Compressing backup folder..." >> $ZimLogFile
tar -zcvpf $ZimBackupPath/$ZimBackupFile -C $ZimBackupPath tmd zimbra_version.txt >> $ZimLogFile
echo "`date "+%Y-%m-%d %H:%M:%S"` - Compressing backup folder done." >> $ZimLogFile
else
# Cleaning backup folder
#rm -r -f $ZimMsgDiffTmpPath/*
# Hot syncing to backup folder
rsync -avHK --compare-dest=$ZimMsgFullTmpPath/ $ZimInstPath/$ZimHome/store $ZimMsgDiffTmpPath
# Compressing backup folder
tar -zcvpf $ZimBackupPath/$ZimBackupFile -C $ZimBackupPath tmd zimbra_version.txt
fi
}
file_transfer() {
# Transfer with ftp
if [ $ZimFtpEnable == "yes" ]
then
if [ "$2" = "--no-send" ]
then
# If --no-send is set ignore sending file to off site.
echo "`date "+%Y-%m-%d %H:%M:%S"` - Backup not sending backup file to external storage, --no-send is set." >> $ZimLogFile
echo "Not sending backup to external storage, --no-send is set."
else
if [ $ZimLogEnable = 'yes' ] && [ $ZimLogVerbose = 'yes' ]
then
# Send task start time to log
echo "`date "+%Y-%m-%d %H:%M:%S"` - Sending file via ftp to off-site storage..." >> $ZimLogFile
# Make a temporary script for expect commands
touch $ZimBackupPath/ftp.exp
# Fill script with commands
echo '#!/usr/bin/expect --' >> $ZimBackupPath/ftp.exp
echo 'set timeout -1' >> $ZimBackupPath/ftp.exp
echo 'spawn ftp '$ZimFilehostAddress >> $ZimBackupPath/ftp.exp
echo 'expect ):' >> $ZimBackupPath/ftp.exp
echo 'send '$ZimFilehostUser'\r' >> $ZimBackupPath/ftp.exp
echo 'expect :' >> $ZimBackupPath/ftp.exp
echo 'send '$ZimFilehostPass'\r' >> $ZimBackupPath/ftp.exp
echo 'expect >' >> $ZimBackupPath/ftp.exp
echo 'send '$ZimFtpOpt'\r' >> $ZimBackupPath/ftp.exp
echo 'send "send '$ZimBackupPath/$ZimBackupFile $ZimFilehostFolder/$ZimBackupFile'\r"' >> $ZimBackupPath/ftp.exp
echo 'expect >' >> $ZimBackupPath/ftp.exp
echo 'send quit\r' >> $ZimBackupPath/ftp.exp
echo 'expect closed' >> $ZimBackupPath/ftp.exp
# Run expect with created script
expect $ZimBackupPath/ftp.exp >> $ZimLogFile
# Delete temporary expect script
rm $ZimBackupPath/ftp.exp
# Send task stop time to log
echo "`date "+%Y-%m-%d %H:%M:%S"` - Sending file via ftp to off-site storage done." >> $ZimLogFile
else
# Send task start time to log
echo "`date "+%Y-%m-%d %H:%M:%S"` - Sending file via ftp to off-site storage..." >> $ZimLogFile
# Make a temporary script for expect commands
touch $ZimBackupPath/ftp.exp
# Fill script with commands
echo '#!/usr/bin/expect --' >> $ZimBackupPath/ftp.exp
echo 'set timeout -1' >> $ZimBackupPath/ftp.exp
echo 'spawn ftp '$ZimFilehostAddress >> $ZimBackupPath/ftp.exp
echo 'expect ):' >> $ZimBackupPath/ftp.exp
echo 'send '$ZimFilehostUser'\r' >> $ZimBackupPath/ftp.exp
echo 'expect :' >> $ZimBackupPath/ftp.exp
echo 'send '$ZimFilehostPass'\r' >> $ZimBackupPath/ftp.exp
echo 'expect >' >> $ZimBackupPath/ftp.exp
echo 'send '$ZimFtpOpt'\r' >> $ZimBackupPath/ftp.exp
echo 'send "send '$ZimBackupPath/$ZimBackupFile $ZimFilehostFolder/$ZimBackupFile'\r"' >> $ZimBackupPath/ftp.exp
echo 'expect >' >> $ZimBackupPath/ftp.exp
echo 'send quit\r' >> $ZimBackupPath/ftp.exp
echo 'expect closed' >> $ZimBackupPath/ftp.exp
# Run expect with created script
expect $ZimBackupPath/ftp.exp
# Delete temporary expect script
rm $ZimBackupPath/ftp.exp
# Send task stop time to log
echo "`date "+%Y-%m-%d %H:%M:%S"` - Sending file via ftp to off-site storage done." >> $ZimLogFile
fi
fi
fi
# Transfer with scp
if [ $ZimScpEnable == "yes" ]
then
if [ "$2" = "--no-send" ]
then
# If --no-send is set ignore sending file to off site.
echo "`date "+%Y-%m-%d %H:%M:%S"` - Backup not sending backup file to external storage, --no-send is set." >> $ZimLogFile
echo "Not sending backup to external storage, --no-send is set."
else
if [ $ZimLogEnable = 'yes' ] && [ $ZimLogVerbose = 'yes' ]
then
# Send task start time to log
echo "`date "+%Y-%m-%d %H:%M:%S"` - Sending file via scp to off-site storage..." >> $ZimLogFile
# Make a temporary script for expect commands
touch $ZimBackupPath/scp.exp
# Fill script with commands
echo '#!/usr/bin/expect --' >> $ZimBackupPath/scp.exp
echo 'set timeout -1' >> $ZimBackupPath/scp.exp
echo 'spawn scp '$ZimScpOpt $ZimBackupPath/$ZimBackupFile $ZimFilehostUser'@'$ZimFilehostAddress':'$ZimFilehostFolder >> $ZimBackupPath/scp.exp
echo 'expect :' >> $ZimBackupPath/scp.exp
echo 'send '$ZimFilehostPass'\r' >> $ZimBackupPath/scp.exp
echo 'expect closed' >> $ZimBackupPath/scp.exp
# Run expect with created script
expect $ZimBackupPath/scp.exp >> $ZimLogFile
# Delete temporary expect script
rm $ZimBackupPath/scp.exp
# Send task stop time to log
echo "`date "+%Y-%m-%d %H:%M:%S"` - Sending file via scp to off-site storage done." >> $ZimLogFile
else
# Send task start time to log
echo "`date "+%Y-%m-%d %H:%M:%S"` - Sending file via scp to off-site storage..." >> $ZimLogFile
# Make a temporary script for expect commands
touch $ZimBackupPath/scp.exp
# Fill script with commands
echo '#!/usr/bin/expect --' >> $ZimBackupPath/scp.exp
echo 'set timeout -1' >> $ZimBackupPath/scp.exp
echo 'spawn scp '$ZimScpOpt $ZimBackupPath/$ZimBackupFile $ZimFilehostUser'@'$ZimFilehostAddress':'$ZimFilehostFolder >> $ZimBackupPath/scp.exp
echo 'expect :' >> $ZimBackupPath/scp.exp
echo 'send '$ZimFilehostPass'\r' >> $ZimBackupPath/scp.exp
echo 'expect closed' >> $ZimBackupPath/scp.exp
# Run expect with created script
expect $ZimBackupPath/scp.exp
# Delete temporary expect script
rm $ZimBackupPath/scp.exp
# Send task stop time to log
echo "`date "+%Y-%m-%d %H:%M:%S"` - Sending file via scp to off-site storage done." >> $ZimLogFile
fi
fi
fi
# Remove local file(s) if ZimDeleteLocalFile is set to 'yes'
if [ $ZimDeleteLocalFile == "yes" ]
then
if [ $ZimLogEnable = 'yes' ] && [ $ZimLogVerbose = 'yes' ]
then
# Send task start time to log
echo "`date "+%Y-%m-%d %H:%M:%S"` - Deleting local file(s)..." >> $ZimLogFile
# Remove backup files matching criteria
find $ZimBackupPath -maxdepth 1 -type f -mmin +$ZimDeleteTimeSet -name ZimBackup\*.tar.gz -exec rm {} + >> $ZimLogFile
# Send task stop time to log
echo "`date "+%Y-%m-%d %H:%M:%S"` - Deleting local file(s) done." >> $ZimLogFile
else
# Remove backup files matching criteria
find $ZimBackupPath -maxdepth 1 -type f -mmin +$ZimDeleteTimeSet -name ZimBackup\*.tar.gz -exec rm {} +
fi
fi
}
log_start() {
if [ $ZimLogEnable = 'yes' ]
then
# Sending backup start time to log
echo "" >> $ZimLogFile
echo "-------------------------------------------------------" >> $ZimLogFile
echo "Backup Started: `date "+%Y-%m-%d %H:%M:%S"` Type: $ZimBackupType" >> $ZimLogFile
fi
}
log_end() {
if [ $ZimLogEnable = 'yes' ]
then
# Sending backup stop time to log
echo "Backup Finished: `date "+%Y-%m-%d %H:%M:%S"` Type: $ZimBackupType" >> $ZimLogFile
echo "-------------------------------------------------------" >> $ZimLogFile
fi
}
zimbra_start() {
if [ "$2" = "--no-start" ]
then
# If --no-start is set ignore starting Zimbra
echo "`date "+%Y-%m-%d %H:%M:%S"` - Zimbra services not starting, --no-start is set." >> $ZimLogFile
echo "Zimbra services not starting, --no-start is set."
else
# Starting Zimbra
if [ $ZimLogEnable = 'yes' ]
then
# Sending task start time to log
echo "`date "+%Y-%m-%d %H:%M:%S"` - Zimbra services starting..." >> $ZimLogFile
# Starting Zimbra
su zimbra -c -l "$ZimInstPath/$ZimHome/bin/zmcontrol start" >> $ZimLogFile
# Send task stop time to log
echo "`date "+%Y-%m-%d %H:%M:%S"` - Zimbra services started." >> $ZimLogFile
else
# Starting Zimbra
su zimbra -c -l "$ZimInstPath/$ZimHome/bin/zmcontrol start"
fi
fi
}
zimbra_stop() {
# Stopping Zimbra
if [ $ZimLogEnable = 'yes' ]
then
# Sending task start time to log
echo "`date "+%Y-%m-%d %H:%M:%S"` - Zimbra services stopping..." >> $ZimLogFile
# Stopping Zimbra
su zimbra -c -l "$ZimInstPath/$ZimHome/bin/zmcontrol stop" >> $ZimLogFile
# Sending task stop time to log
echo "`date "+%Y-%m-%d %H:%M:%S"` - Zimbra services stopped." >> $ZimLogFile
# Sleep for 10 seconds to give shutdown some extra time before backup starts
sleep 10
else
# Stopping Zimbra
su zimbra -c -l "$ZimInstPath/$ZimHome/bin/zmcontrol stop"
# Sleep for 10 seconds to give shutdown some extra time before backup starts
sleep 10
fi
}
backup_file() {
# Checks what backup is choosen and sets file-name appropiate
# Full system backup
if [ "$ZimBackupType" = "--full" ]
then
ZimBackupFile=ZimBackupSystemFull_`date +%Y%m%d%H%M`.tar.gz
fi
# Differential system backup
if [ "$ZimBackupType" = "--diff" ]
then
ZimBackupFile=ZimBackupSystemDiff_`date +%Y%m%d%H%M`.tar.gz
fi
# Full message backup
if [ "$ZimBackupType" = "--msg-full" ]
then
ZimBackupFile=ZimBackupMsgFull_`date +%Y%m%d%H%M`.tar.gz
fi
# Differential message backup
if [ "$ZimBackupType" = "--msg-diff" ]
then
ZimBackupFile=ZimBackupMsgDiff_`date +%Y%m%d%H%M`.tar.gz
fi
}
log_file() {
# Check to see if the log folder exist, create if not
mkdir -p $ZimLogPath
# Check log intervall and decide which file-name to use
if [ "$ZimLogLogRotate" = "yes" ]
then
# Set log file-name to day
if [ "$ZimLogRotateInt" = "day" ]
then
# If file do not exist create it
touch $ZimLogPath/ZimBackupDay_`date +%Y-%m-%d`.log
# Set correct file-name
ZimLogFile=$ZimLogPath/ZimBackupDay_`date +%Y-%m-%d`.log
fi
# Set log file-name to week
if [ "$ZimLogRotateInt" = "week" ]
then
# If file do not exist create it
touch $ZimLogPath/ZimBackupWeek_`date +%Y-%V`.log
# Set correct file-name
ZimLogFile=$ZimLogPath/ZimBackupWeek_`date +%Y-%V`.log
fi
# Set log file-name to month
if [ "$ZimLogRotateInt" = "month" ]
then
# If file do not exist create it
touch $ZimLogPath/ZimBackupMonth_`date +%Y-%m`.log
# Set correct file-name
ZimLogFile=$ZimLogPath/ZimBackupMonth_`date +%Y-%m`.log
fi
else
# If file do not exist create it
touch $ZimLogPath/ZimBackup.log
# Set correct file-name
ZimLogFile=$ZimLogPath/ZimBackup.log
fi
}
temp_folders() {
# Create & set temp folders under $ZimBackupPath
ZimFullTmpPath=$ZimBackupPath/tf
ZimDiffTmpPath=$ZimBackupPath/td
ZimMsgFullTmpPath=$ZimBackupPath/tmf
ZimMsgDiffTmpPath=$ZimBackupPath/tmd
mkdir -p $ZimFullTmpPath
mkdir -p $ZimDiffTmpPath
mkdir -p $ZimMsgFullTmpPath
mkdir -p $ZimMsgDiffTmpPath
}
script_help() {
# Show help for script
echo "oZimBackup.sh Usage:"
echo ""
echo "--full For full backup (Cold)"
echo "--diff For differential backup (Cold)"
echo "--msg-full For complete message backup (Hot)"
echo "--msg-diff For differential message backup (Hot)"
echo "--check Check if needed software is installed, depends"
echo " on script configuration"
echo "--help Shows this help"
echo ""
echo "--no-start Tells Zimbra to stay offline after backup"
#echo "<file to restore> File to restore from"
echo ""
echo "Ex. Full backup:"
echo " oZimBackup.sh --full"
echo ""
echo "Ex. Full differential backup leaving Zimbra in offline mode:"
echo " oZimBackup.sh --diff --no-start"
echo ""
}
case $1 in
--full)
pre_check
pre_load
log_start
full_backup
file_transfer
log_end
;;
--diff)
pre_check
pre_load
log_start
diff_backup
file_transfer
log_end
;;
--msg-full)
pre_check
pre_load
log_start
msgfull_backup
file_transfer
log_end
;;
--msg-diff)
pre_check
pre_load
log_start
msgdiff_backup
file_transfer
log_end
;;
--check)
pre_check
;;
--help)
script_help
;;
*)
script_help
;;
esac