diff --git a/zimbra_backup.sh b/zimbra_backup.sh new file mode 100644 index 0000000..30b5599 --- /dev/null +++ b/zimbra_backup.sh @@ -0,0 +1,43 @@ +#!/bin/bash + +# Ensure script is run as root or sudo +if [ "$EUID" -ne 0 ]; then + echo "❌ This script must be run as root or with sudo." + exit 1 +fi + +# Prompt for email and backup directory +read -p "Enter Zimbra username (email address): " EMAIL +read -p "Enter backup directory (absolute path) [/opt/zimbra/backups]: " BACKUP_DIR + +# Use default if none provided +BACKUP_DIR=${BACKUP_DIR:-/opt/zimbra/backups} + +# Ensure directory exists +mkdir -p "$BACKUP_DIR" +chown zimbra:zimbra "$BACKUP_DIR" + +# Generate timestamped filename +TIMESTAMP=$(date +%F_%H-%M-%S) +BACKUP_FILE="${BACKUP_DIR}/${EMAIL}_${TIMESTAMP}.tgz" + +# Confirm action +echo "Backing up mailbox for $EMAIL to $BACKUP_FILE" +read -p "Proceed? (y/n): " CONFIRM +if [[ ! "$CONFIRM" =~ ^[Yy]$ ]]; then + echo "❌ Backup cancelled." + exit 0 +fi + +# Run zmmailbox command as zimbra user +echo "📦 Starting backup..." +sudo -u zimbra bash -c "/opt/zimbra/bin/zmmailbox -z -m '$EMAIL' getRestURL '//?fmt=tgz'" > "$BACKUP_FILE" + +# Verify success +if [ $? -eq 0 ]; then + echo "✅ Backup completed: $BACKUP_FILE" +else + echo "❌ Backup failed. Check if the user exists or zmmailbox is working." + rm -f "$BACKUP_FILE" + exit 1 +fi