Go to most recent revision | 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.5# Last updated: 2012-01-02 23:15#### 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/logs # Folder for log filesZimLogVerbose=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 SettingsZimFtpOpt='' # Extra options for ftp file transfer, see manual for ftp command# Extra SCP SettingsZimScpOpt='' # Extra options for scp file transfer, see manual for scp command# Common SettingsZimFilehostUser= # Username for file transfersZimFilehostPass= # Password for file transfersZimFilehostAddress= # Host address for file transfersZimFilehostFolder= # 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 typeZimBackupType=$1pre_check() {# Set default abort valueZimAbort=0# Check for rsyncif [ ! -e /usr/bin/rsync ]thenecho "Cannot find rsync software..."ZimAbort=1fi# Check for tarif [ ! -e /bin/tar ]thenecho "Cannot find tar software..."ZimAbort=1fi# Check for gzipif [ ! -e /bin/gzip ]thenif [ ! -e /usr/bin/gzip ]thenecho "Cannot find gzip software..."ZimAbort=1fifi# Check if expect, ftp & scp is installed when file transfer is set to yesif [ $ZimFtpEnable = 'yes' ] || [ $ZimScpEnable = 'yes' ]thenif [ ! -e /usr/bin/expect ]thenecho "cannot find expect command..."ZimAbort=1fiif [ $ZimFtpEnable = 'yes' ]thenif [ ! -e /usr/bin/ftp ]thenecho "Cannot find ftp command..."ZimAbort=1fifiif [ $ZimScpEnable = 'yes' ]thenif [ ! -e /usr/bin/scp ]thenecho "Cannot find scp command..."ZimAbort=1fififiif [ $ZimAbort = '1' ]thenecho "Please install above software, script exiting..."exitfi}pre_load() {# Get temporary folder layouttemp_folders# Get backup file formatbackup_file# Get log file formatlog_file# Check to see if the backup folder exist, create if notmkdir -p $ZimBackupPath# Check which zimbra version that is installed, for recovery purposessudo -u zimbra $ZimInstPath/$ZimHome/bin/zmcontrol -v > $ZimBackupPath/zimbra_version.txt}full_backup() {if [ $ZimLogEnable = 'yes' ] && [ $ZimLogVerbose = 'yes' ]then# Hot sync before shutdown on zimbra folderecho "`date "+%Y-%m-%d %H:%M:%S"` - Hot syncing to backup folder..." >> $ZimLogFilersync -avHK --delete $ZimInstPath/$ZimHome $ZimFullTmpPath >> $ZimLogFileecho "`date "+%Y-%m-%d %H:%M:%S"` - Hot syncing to backup folder done." >> $ZimLogFile# Stopping Zimbrazimbra_stop# Cold sync of zimbra folderecho "`date "+%Y-%m-%d %H:%M:%S"` - Cold syncing to backup folder..." >> $ZimLogFilersync -avHK --delete $ZimInstPath/$ZimHome $ZimFullTmpPath >> $ZimLogFileecho "`date "+%Y-%m-%d %H:%M:%S"` - Cold syncing to backup folder done." >> $ZimLogFile# Starting Zimbrazimbra_start# Compressing backup for space reductionecho "`date "+%Y-%m-%d %H:%M:%S"` - Compressing backup folder..." >> $ZimLogFiletar -zcvpf $ZimBackupPath/$ZimBackupFile -C $ZimBackupPath tf zimbra_version.txt >> $ZimLogFileecho "`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/* >> $ZimLogFileecho "`date "+%Y-%m-%d %H:%M:%S"` - Cleaned differential backup folder."else# Hot sync before shutdown on zimbra folderrsync -avHK --delete $ZimInstPath/$ZimHome $ZimFullTmpPath# Stopping Zimbrazimbra_stop# Cold sync of zimbra folderrsync -avHK --delete $ZimInstPath/$ZimHome $ZimFullTmpPath# Starting Zimbrazimbra_start# Compressing backup for space reductiontar -zcvpf $ZimBackupPath/$ZimBackupFile -C $ZimBackupPath tf zimbra_version.txt# Cleaning differential folder.rm -r -f $ZimDiffTmpPath/*fi}diff_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 $ZimDiffTmpPath/* >> $ZimLogFile#echo "`date "+%Y-%m-%d %H:%M:%S"` - Cleaning backup folder done." >> $ZimLogFile# Hot syncing to backup folderecho "`date "+%Y-%m-%d %H:%M:%S"` - Hot syncing to backup folder..." >> $ZimLogFilersync -avHK --compare-dest=$ZimFullTmpPath/ $ZimInstPath/$ZimHome $ZimDiffTmpPath >> $ZimLogFileecho "`date "+%Y-%m-%d %H:%M:%S"` - Hot syncing to backup folder done." >> $ZimLogFile# Stopping Zimbrazimbra_stop# Cold syncing to backup folderecho "`date "+%Y-%m-%d %H:%M:%S"` - Cold syncing to backup folder..." >> $ZimLogFilersync -avHK --compare-dest=$ZimFullTmpPath/ $ZimInstPath/$ZimHome $ZimDiffTmpPath >> $ZimLogFileecho "`date "+%Y-%m-%d %H:%M:%S"` - Cold syncing to backup folder done." >> $ZimLogFile# Starting Zimbrazimbra_start# Syncing backup folders#echo "`date "+%Y-%m-%d %H:%M:%S"` - Syncing backup folders..." >> $ZimLogFile#cp -R $ZimDiffTmpPath/* $ZimFullTmpPath/ >> $ZimLogFile#echo "`date "+%Y-%m-%d %H:%M:%S"` - Syncing backup folders done." >> $ZimLogFile# Compressing backup folderecho "`date "+%Y-%m-%d %H:%M:%S"` - Compressing backup folder..." >> $ZimLogFiletar -zcvpf $ZimBackupPath/$ZimBackupFile -C $ZimBackupPath td zimbra_version.txt >> $ZimLogFileecho "`date "+%Y-%m-%d %H:%M:%S"` - Compressing backup folder done." >> $ZimLogFileelse# Hot sync before shutdown on zimbra folder#rm -R $ZimDiffTmpPath/*rsync -avHK --compare-dest=$ZimFullTmpPath/ $ZimInstPath/$ZimHome $ZimDiffTmpPath# Stopping Zimbrazimbra_stop# Cold sync of zimbra folderrsync -avHK --compare-dest=$ZimFullTmpPath/ $ZimInstPath/$ZimHome $ZimDiffTmpPath# Starting Zimbrazimbra_start# Syncing files from diff to full backup folder#cp -R $ZimDiffTmpPath/* $ZimFullTmpPath/# Compressing backup for space reductiontar -zcvpf $ZimBackupPath/$ZimBackupFile -C $ZimBackupPath td zimbra_version.txtfi}msgfull_backup() {if [ $ZimLogEnable = 'yes' ] && [ $ZimLogVerbose = 'yes' ]then# Hot syncing to backup folderecho "`date "+%Y-%m-%d %H:%M:%S"` - Hot syncing to backup folder..." >> $ZimLogFilersync -avHK --delete $ZimInstPath/$ZimHome/store $ZimMsgFullTmpPath >> $ZimLogFileecho "`date "+%Y-%m-%d %H:%M:%S"` - Hot syncing to backup folder done." >> $ZimLogFile# Compressing backup folderecho "`date "+%Y-%m-%d %H:%M:%S"` - Compressing backup folder..." >> $ZimLogFiletar -zcvpf $ZimBackupPath/$ZimBackupFile -C $ZimBackupPath tmf zimbra_version.txt >> $ZimLogFileecho "`date "+%Y-%m-%d %H:%M:%S"` - Compressing backup folder done." >> $ZimLogFileecho "`date "+%Y-%m-%d %H:%M:%S"` - Cleaning differential backup folder..."rm -r -f $ZimMsgDiffTmpPath/* >> $ZimLogFileecho "`date "+%Y-%m-%d %H:%M:%S"` - Cleaned differential backup folder."else# Hot syncing to backup folderrsync -avHK --delete $ZimInstPath/$ZimHome/store $ZimMsgFullTmpPath# Compressing backup foldertar -zcvpf $ZimBackupPath/$ZimBackupFile -C $ZimBackupPath tmf zimbra_version.txt# Cleaning differential folderrm -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 folderecho "`date "+%Y-%m-%d %H:%M:%S"` - Hot syncing to backup folder..." >> $ZimLogFilersync -avHK --compare-dest=$ZimMsgFullTmpPath/ $ZimInstPath/$ZimHome/store $ZimMsgDiffTmpPath >> $ZimLogFileecho "`date "+%Y-%m-%d %H:%M:%S"` - Hot syncing to backup folder done." >> $ZimLogFile# Compressing backup folderecho "`date "+%Y-%m-%d %H:%M:%S"` - Compressing backup folder..." >> $ZimLogFiletar -zcvpf $ZimBackupPath/$ZimBackupFile -C $ZimBackupPath tmd zimbra_version.txt >> $ZimLogFileecho "`date "+%Y-%m-%d %H:%M:%S"` - Compressing backup folder done." >> $ZimLogFileelse# Cleaning backup folder#rm -r -f $ZimMsgDiffTmpPath/*# Hot syncing to backup folderrsync -avHK --compare-dest=$ZimMsgFullTmpPath/ $ZimInstPath/$ZimHome/store $ZimMsgDiffTmpPath# Compressing backup foldertar -zcvpf $ZimBackupPath/$ZimBackupFile -C $ZimBackupPath tmd zimbra_version.txtfi}file_transfer() {# Transfer with ftpif [ $ZimFtpEnable == "yes" ]thenif [ $ZimLogEnable = 'yes' ] && [ $ZimLogVerbose = 'yes' ]then# Send task start time to logecho "`date "+%Y-%m-%d %H:%M:%S"` - Sending file via ftp to off-site storage..." >> $ZimLogFile# Make a temporary script for expect commandstouch $ZimBackupPath/ftp.exp# Fill script with commandsecho '#!/usr/bin/expect --' >> $ZimBackupPath/ftp.expecho 'set timeout -1' >> $ZimBackupPath/ftp.expecho 'spawn ftp '$ZimFilehostAddress >> $ZimBackupPath/ftp.expecho 'expect ):' >> $ZimBackupPath/ftp.expecho 'send '$ZimFilehostUser'\r' >> $ZimBackupPath/ftp.expecho 'expect :' >> $ZimBackupPath/ftp.expecho 'send '$ZimFilehostPass'\r' >> $ZimBackupPath/ftp.expecho 'expect >' >> $ZimBackupPath/ftp.expecho 'send '$ZimFtpOpt'\r' >> $ZimBackupPath/ftp.expecho 'send "send '$ZimBackupPath/$ZimBackupFile $ZimFilehostFolder/$ZimBackupFile'\r"' >> $ZimBackupPath/ftp.expecho 'expect >' >> $ZimBackupPath/ftp.expecho 'send quit\r' >> $ZimBackupPath/ftp.expecho 'expect closed' >> $ZimBackupPath/ftp.exp# Run expect with created scriptexpect $ZimBackupPath/ftp.exp >> $ZimLogFile# Delete temporary expect scriptrm $ZimBackupPath/ftp.exp# Send task stop time to logecho "`date "+%Y-%m-%d %H:%M:%S"` - Sending file via ftp to off-site storage done." >> $ZimLogFileelse# Send task start time to logecho "`date "+%Y-%m-%d %H:%M:%S"` - Sending file via ftp to off-site storage..." >> $ZimLogFile# Make a temporary script for expect commandstouch $ZimBackupPath/ftp.exp# Fill script with commandsecho '#!/usr/bin/expect --' >> $ZimBackupPath/ftp.expecho 'set timeout -1' >> $ZimBackupPath/ftp.expecho 'spawn ftp '$ZimFilehostAddress >> $ZimBackupPath/ftp.expecho 'expect ):' >> $ZimBackupPath/ftp.expecho 'send '$ZimFilehostUser'\r' >> $ZimBackupPath/ftp.expecho 'expect :' >> $ZimBackupPath/ftp.expecho 'send '$ZimFilehostPass'\r' >> $ZimBackupPath/ftp.expecho 'expect >' >> $ZimBackupPath/ftp.expecho 'send '$ZimFtpOpt'\r' >> $ZimBackupPath/ftp.expecho 'send "send '$ZimBackupPath/$ZimBackupFile $ZimFilehostFolder/$ZimBackupFile'\r"' >> $ZimBackupPath/ftp.expecho 'expect >' >> $ZimBackupPath/ftp.expecho 'send quit\r' >> $ZimBackupPath/ftp.expecho 'expect closed' >> $ZimBackupPath/ftp.exp# Run expect with created scriptexpect $ZimBackupPath/ftp.exp# Delete temporary expect scriptrm $ZimBackupPath/ftp.exp# Send task stop time to logecho "`date "+%Y-%m-%d %H:%M:%S"` - Sending file via ftp to off-site storage done." >> $ZimLogFilefifi# Transfer with scpif [ $ZimScpEnable == "yes" ]thenif [ $ZimLogEnable = 'yes' ] && [ $ZimLogVerbose = 'yes' ]then# Send task start time to logecho "`date "+%Y-%m-%d %H:%M:%S"` - Sending file via scp to off-site storage..." >> $ZimLogFile# Make a temporary script for expect commandstouch $ZimBackupPath/scp.exp# Fill script with commandsecho '#!/usr/bin/expect --' >> $ZimBackupPath/scp.expecho 'set timeout -1' >> $ZimBackupPath/scp.expecho 'spawn scp '$ZimScpOpt $ZimBackupPath/$ZimBackupFile $ZimFilehostUser'@'$ZimFilehostAddress':'$ZimFilehostFolder >> $ZimBackupPath/scp.expecho 'expect :' >> $ZimBackupPath/scp.expecho 'send '$ZimFilehostPass'\r' >> $ZimBackupPath/scp.expecho 'expect closed' >> $ZimBackupPath/scp.exp# Run expect with created scriptexpect $ZimBackupPath/scp.exp >> $ZimLogFile# Delete temporary expect scriptrm $ZimBackupPath/scp.exp# Send task stop time to logecho "`date "+%Y-%m-%d %H:%M:%S"` - Sending file via scp to off-site storage done." >> $ZimLogFileelse# Send task start time to logecho "`date "+%Y-%m-%d %H:%M:%S"` - Sending file via scp to off-site storage..." >> $ZimLogFile# Make a temporary script for expect commandstouch $ZimBackupPath/scp.exp# Fill script with commandsecho '#!/usr/bin/expect --' >> $ZimBackupPath/scp.expecho 'set timeout -1' >> $ZimBackupPath/scp.expecho 'spawn scp '$ZimScpOpt $ZimBackupPath/$ZimBackupFile $ZimFilehostUser'@'$ZimFilehostAddress':'$ZimFilehostFolder >> $ZimBackupPath/scp.expecho 'expect :' >> $ZimBackupPath/scp.expecho 'send '$ZimFilehostPass'\r' >> $ZimBackupPath/scp.expecho 'expect closed' >> $ZimBackupPath/scp.exp# Run expect with created scriptexpect $ZimBackupPath/scp.exp# Delete temporary expect scriptrm $ZimBackupPath/scp.exp# Send task stop time to logecho "`date "+%Y-%m-%d %H:%M:%S"` - Sending file via scp to off-site storage done." >> $ZimLogFilefifi# Remove local file(s) if ZimDeleteLocalFile is set to 'yes'if [ $ZimDeleteLocalFile == "yes" ]thenif [ $ZimLogEnable = 'yes' ] && [ $ZimLogVerbose = 'yes' ]then# Send task start time to logecho "`date "+%Y-%m-%d %H:%M:%S"` - Deleting local file(s)..." >> $ZimLogFile# Remove backup files matching criteriafind $ZimBackupPath -maxdepth 1 -type f -mmin +$ZimDeleteTimeSet -name ZimBackup\*.tar.gz -exec rm {} + >> $ZimLogFile# Send task stop time to logecho "`date "+%Y-%m-%d %H:%M:%S"` - Deleting local file(s) done." >> $ZimLogFileelse# Remove backup files matching criteriafind $ZimBackupPath -maxdepth 1 -type f -mmin +$ZimDeleteTimeSet -name ZimBackup\*.tar.gz -exec rm {} +fifi}log_start() {if [ $ZimLogEnable = 'yes' ]then# Sending backup start time to logecho "" >> $ZimLogFileecho "-------------------------------------------------------" >> $ZimLogFileecho "Backup Started: `date "+%Y-%m-%d %H:%M:%S"` Type: $ZimBackupType" >> $ZimLogFilefi}log_end() {if [ $ZimLogEnable = 'yes' ]then# Sending backup stop time to logecho "Backup Finished: `date "+%Y-%m-%d %H:%M:%S"` Type: $ZimBackupType" >> $ZimLogFileecho "-------------------------------------------------------" >> $ZimLogFilefi}zimbra_start() {if [ "$2" = "--no-start" ]then# If --no-start is set ignore starting Zimbraecho "`date "+%Y-%m-%d %H:%M:%S"` - Zimbra services not starting, --no-start is set." >> $ZimLogFileecho "Zimbra services not starting, --no-start is set."else# Starting Zimbraif [ $ZimLogEnable = 'yes' ]then# Sending task start time to logecho "`date "+%Y-%m-%d %H:%M:%S"` - Zimbra services starting..." >> $ZimLogFile# Starting Zimbrasu zimbra -c -l "zmcontrol start" >> $ZimLogFile# Send task stop time to logecho "`date "+%Y-%m-%d %H:%M:%S"` - Zimbra services started." >> $ZimLogFileelse# Starting Zimbrasu zimbra -c -l "zmcontrol start"fifi}zimbra_stop() {# Stopping Zimbraif [ $ZimLogEnable = 'yes' ]then# Sending task start time to logecho "`date "+%Y-%m-%d %H:%M:%S"` - Zimbra services stopping..." >> $ZimLogFile# Stopping Zimbrasu zimbra -c -l "zmcontrol stop" >> $ZimLogFile# Sending task stop time to logecho "`date "+%Y-%m-%d %H:%M:%S"` - Zimbra services stopped." >> $ZimLogFile# Sleep for 10 seconds to give shutdown some extra time before backup startssleep 10else# Stopping Zimbrasu zimbra -c -l "zmcontrol stop"# Sleep for 10 seconds to give shutdown some extra time before backup startssleep 10fi}full_restore() {echo "Full Restore under development"}diff_restore() {echo "Diff Restore under development"}backup_file() {# Checks what backup is choosen and sets file-name appropiate# Full system backupif [ "$ZimBackupType" = "--full" ]thenZimBackupFile=ZimBackupSystemFull_`date +%Y%m%d%H%M`.tar.gzfi# Differential system backupif [ "$ZimBackupType" = "--diff" ]thenZimBackupFile=ZimBackupSystemDiff_`date +%Y%m%d%H%M`.tar.gzfi# Full message backupif [ "$ZimBackupType" = "--msg-full" ]thenZimBackupFile=ZimBackupMsgFull_`date +%Y%m%d%H%M`.tar.gzfi# Differential message backupif [ "$ZimBackupType" = "--msg-diff" ]thenZimBackupFile=ZimBackupMsgDiff_`date +%Y%m%d%H%M`.tar.gzfi}log_file() {# Check to see if the log folder exist, create if notmkdir -p $ZimLogPath# Check log intervall and decide which file-name to useif [ "$ZimLogLogRotate" = "yes" ]then# Set log file-name to dayif [ "$ZimLogRotateInt" = "day" ]then# If file do not exist create ittouch $ZimLogPath/ZimBackupDay_`date +%Y-%m-%d`.log# Set correct file-nameZimLogFile=$ZimLogPath/ZimBackupDay_`date +%Y-%m-%d`.logfi# Set log file-name to weekif [ "$ZimLogRotateInt" = "week" ]then# If file do not exist create ittouch $ZimLogPath/ZimBackupWeek_`date +%Y-%V`.log# Set correct file-nameZimLogFile=$ZimLogPath/ZimBackupWeek_`date +%Y-%V`.logfi# Set log file-name to monthif [ "$ZimLogRotateInt" = "month" ]then# If file do not exist create ittouch $ZimLogPath/ZimBackupMonth_`date +%Y-%m`.log# Set correct file-nameZimLogFile=$ZimLogPath/ZimBackupMonth_`date +%Y-%m`.logfielse# If file do not exist create ittouch $ZimLogPath/ZimBackup.log# Set correct file-nameZimLogFile=$ZimLogPath/ZimBackup.logfi}temp_folders() {# Create & set temp folders under $ZimBackupPathZimFullTmpPath=$ZimBackupPath/tfZimDiffTmpPath=$ZimBackupPath/tdZimMsgFullTmpPath=$ZimBackupPath/tmfZimMsgDiffTmpPath=$ZimBackupPath/tmdmkdir -p $ZimFullTmpPathmkdir -p $ZimDiffTmpPathmkdir -p $ZimMsgFullTmpPathmkdir -p $ZimMsgDiffTmpPath}restore_guide() {echo "Restore Guide"}script_help() {# Show help for scriptecho "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 "--restore-guide Shows a short guide on how to restore Zimbra"#echo "--full-restore Does a complete restore"#echo "--diff-restore Restores a differential backup"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. Complete restore:"#echo " oZimBackup.sh --full-restore /path/to/file/zimbackup.tar.gz"echo ""echo "Ex. Full differential backup leaving Zimbra in offline mode:"echo " oZimBackup.sh --diff --no-start"echo ""}case $1 in--full)pre_checkpre_loadlog_startfull_backupfile_transferlog_end;;--diff)pre_checkpre_loadlog_startdiff_backupfile_transferlog_end;;--msg-full)pre_checkpre_loadlog_startmsgfull_backupfile_transferlog_end;;--msg-diff)pre_checkpre_loadlog_startmsgdiff_backupfile_transferlog_end;;--full-restore)full_restore;;--diff-restore)diff_restore;;--restore-guide)restore_guide;;--check)pre_check;;--help)script_help;;*)script_help;;esac