As seguintes ações são executadas:
- Backup local ou remoto por compartilhamento cifs (Windows);
- Backup de aliases;
- Backup de listas;
- Backup dos emails, contatos e agenda no formato tgz;
- Backup de todos os domínios ou alguns;
- Geração de arquivo de log.
Script:
#!/bin/bash
# Marcio Jose Atanasio
# marcio.jose@atanasio.com.br
# Compuserv Informatica
# Versao 20121008
# LOCAL
BCKDIR="/opt/backup"
LOGFILE="/var/log/zmbackup.log"
# User "all" to backup all domains accounts or domains that want backup with space between.
DOMAINS="all"
# REMOTE
MNTREMOTE="//192.168.1.10/backup"
USER="cobaia"
PASSWD="cobaia"
REMOTE_BACKUP=0 # 0 - Backup will be saved in BCKDIR | 1 or others values - Backup will be saved in MNTLOCAL mounted in BCKDIR.
# ENVIROMENT
DT=`date +%Y"-"%m"-"%d`
function put_logger {
echo `date +%Y"-"%m"-"%d" - "%H":"%M`" - $1" >> $LOGFILE
}
function backup_dir {
if [ "$1" = "mount" ]; then
if [ "$REMOTE_BACKUP" = "1" ]; then
/bin/mount $MNTREMOTE $BCKDIR -o user=$USER,password=$PASSWD
if [ "$?" = "0" ]; then
put_logger "Montagem de $MNTREMOTE realizada com sucesso"
else
put_logger "Montagem de $MNTREMOTE falhou. O backup não será efetuado."
exit 0
fi
fi
if [ -d $BCKDIR/$DT ]; then
rm -rf $BCKDIR/$DT
fi
/bin/mkdir $BCKDIR/$DT > /dev/null 2>&1
fi
if [ "$1" = "umount" ]; then
if [ "$REMOTE_BACKUP" = "1" ]; then
/bin/umount $BCKDIR
put_logger "Desmontagem de $MNTREMOTE realizada com sucesso"
fi
fi
}
function get_domains {
if [ "$DOMAINS" = "all" ]; then
DOMAINS=`/opt/zimbra/bin/zmprov gad | sort`
echo $DOMAINS | sed s/" "/"\n"/g >> $BCKDIR/$DT/domains.txt
fi
put_logger "Lista dos domínios $DOMAINS salva."
}
function get_lists {
for DOM in `echo $DOMAINS`; do
for LST in `/opt/zimbra/bin/zmprov gadl $DOM` ; do
echo "Lista "$LST >> $BCKDIR/$DT/$DOM.lists.txt /opt/zimbra/bin/zmprov gdl $LST | grep zimbraMailForwardingAddress | cut -d" " -f2 >> $BCKDIR/$DT/$DOM.lists.txt
echo "" >> $BCKDIR/$DT/$DOM.lists.txt done
put_logger "Salvo lista de distribuição de $DOM."
done
}
function get_aliases {
for DOM in `echo $DOMAINS`; do
for ACC in `/opt/zimbra/bin/zmprov -l gaa $DOM | sort`; do
ALIASES=`/opt/zimbra/bin/zmprov ga $ACC | grep zimbraMailAlias | cut -d: -f2`
if [ ! -z "$ALIASES" ]; then
echo $ACC" - >"$ALIASES >> $BCKDIR/$DT/aliases.txt
fi
done
done
}
function backup_accounts_aliases {
for DOM in `echo $DOMAINS`; do
put_logger "$DOM iniciando backup das contas e aliases."
for ACC in `/opt/zimbra/bin/zmprov -l gaa $DOM | sort`; do
/opt/zimbra/bin/zmmailbox -z -m $ACC getRestURL '//?fmt=tgz' > $BCKDIR/$DT/$ACC.tgz
put_logger "$ACC foi efetuado backup."
ALIASES=`/opt/zimbra/bin/zmprov ga $ACC | grep zimbraMailAlias | cut -d: -f2`
if [ ! -z "$ALIASES" ]; then
echo $ACC" - >"$ALIASES >> $BCKDIR/$DT/$ACC.alias.txt
put_logger "$ACC tem aliases salvos."
fi
done
put_logger "$DOM finalizado backup das contas e aliases."
done
}
# START
put_logger "Início do backup"
put_logger "Efetuar montagem"
backup_dir mount
put_logger "Verificar domínios para efetuar backup"
get_domains
put_logger "Backup listas de distribuição dos domínios"
get_lists
put_logger "Backup das contas e aliases"
backup_accounts_aliases
put_logger "Efetuar desmontagem"
backup_dir umount
put_logger "Fim do backup"
3 comentários:
Olá...Muito bom o seu script. Parabéns...
Por acaso você tem um outro para restaurar??
Obrigado
Na função que gera as listas de distribuição, creio que vc tenha colocado a variável errada por engano ...
$DOM.lists.txt na verdade acho que seja $LST.lists.txt, para que seja criado um arquivo para cada lista e não um arquivo para todo o domínio!
No meu teste ficou ok!
mto bom o script!
[]'s
Obrigado Fabrício
Vou corrigir na postagem.
Até +
Postar um comentário