Backup com envio automático de e-mails usando o tar
Publicado por Igor Teixeira da Rocha (última atualização em 30/05/2012)
[ Hits: 9.472 ]
Pra quem necessita de uma solução simples e rápida para realizar backups com algum tipo de confirmação, neste caso um arquivo de log e e-mails de confirmação.
[]s
#!/bin/bash # script de backup com envio automático de e-mails antes e após a # conclusão do mesmo:. # Autor: Igor Rocha # Data: 20/05/2012 # Variáveis auxiliares:.(Utilizadas no decorrer do script) # No exemplo esta sendo utilizado o /etc, porem fica a critério do # Admin/usuário escolher qual o diretório a ser backupeado:. NOME_DIRETORIO_DESTINO="/etc/" export NOME_DIRETORIO_DESTINO # Nome do diretório para onde o backup será movido, após sua # conclusão: (Não esqueça de verificar as permissões do diretório # onde o backup será movido) NOME_DIRETORIO_MOV="/mnt/backup" # Formatação da Data:Neste caso a formatação fica da seguinte forma: # Ex:. 20/05/2012 para outras formas verifique o manual do comando # date com <man date> DATA_BACKUP=$(date "+%d/%m/%y") # Horário da realização do Backup:. HORARIO_BACKUP=$(date|awk '{print $4}') # Nome dos Arquivos de Log LOG_ERRO_BACKUP="backup_info.log" # A partir daqui são utilizadas variáveis para a autenticação do email # que será enviado após o termino do backup, ou em caso de alguma falha # no decorrer do backup ou após a sua conclusão. # O software utilizado para enviar os e-mails, é o SendEmail,(sendemail) # há uma função que verifica se o mesmo ja está instalado no servidor # isto em distros derivadas do Debian, (.deb), porem é possível alterar # o script para rodar em outras distribuições, para isso verifique o # gerenciador de pacotes que roda em sua distro e altere a função # verifica_pckg_email() de acordo com a sua distro. # Nome do E-mail do remetente: NOME_EMAIL_DEST="seu-email@dominio.com.br" # E-mail do Destinatário: EMAIL_DESTINATARIO="e-mail-de-quem-ira-receberMSG@dominio.com.br" # Assunto do E-mail: em branco no inicio pois o script que ira definir # no decorrer da execução: EMAIL_ASSUNTO="" # Corpo da mensagem, também em branco. EMAIL_MENSAGEM="" # Endereço do Servidor SMTP que irá ser autenticado(neste caso o yahoo) # Para descobrir o seu servidor SMTP, entre nas configurações do seu e-mail # e procure por redirecionamento de e-mail, a configuração de cada um é diferente # aqui tem alguns: # http://pt.kioskea.net/faq/844-enderecos-dos-servidores-pop-e-smtp-dos-principais-fai # O 25 indica a porta Default onde o Serviço do SMTP roda, porém nem todos rodam # nesta mesma porta, como no caso do gmail que roda na porta 995, então # altere a porta de acordo com a sua necessidade. EMAIL_SMTP_ADDR="smtp.mail.yahoo.com.br:25" # Nome do Usuário do ser provedor de e-mails: EMAIL_USER="seu-usuario@gmail.com" # Senha do Usuário: EMAIL_SENHA="sua-senha" # FIM DAS VARÍAVEIS # ########################################################################## # FUNÇÕES UTILIZADAS NO SCRIPT:. # Verifica a conexão com a internet:. # É necessário verificar no seu roteador/gateway se o ICMP não está bloqueado caso contrário # o script não funcionara. verifica_conexao() { # teste a conexão com a internet, enviando 3 pings so google: echo -e "\ntVerificando a conexão com a internet.">>$LOG_ERRO_BACKUP ping -c 3 www.google.com >/dev/null if [ $? != 0 ];then echo -e " $(date) ERRO: Não a conexão com a internet, ou há algum firewall/roteador bloqueando o protocolo ICMP, impossibilitando o teste de conexão com a internet backup abortado em $DATA_BACKUP, verifique o ocorrido e rode o backup novamente.">>$LOG_ERRO_BACKUP exit 1 else echo -e "$(date) INFO: Teste de conexão com a internet realizado com sucesso na data $DATA_BACKUP\n Iniciando backup....">>$LOG_ERRO_BACKUP fi } # Verifica se o pacote sendemail já esta instalado, se não estiver o mesmo aborta o script:. # em distros derivadas do Debian, caso você queira desativar esta função para rodar o script # em outra distro, basta comentar a linha mais abaixo onde ocorre a chamada da função. # PS:. Fora colocado um comentário acima da linha que deve ser comentada. verifica_pckg_email() { # Usando o dpkg(Debian package) a função faz uma busca, na lista de pacotes instalados # caso o mesmo não esteja o script encerra por aqui. echo -e "\ntVerificando se o pacote sendemail está instalado">>$LOG_ERRO_BACKUP dpkg --list|grep sendemail>/dev/null if [ $? != 0 ];then echo -e " $(date) ATENÇÃO: O pacote sendemail não está instalado, por favor, realize a instalação do mesmo, e rode o script novamente, o problema pode ser resolvido utilizado o apt-get(apt-get-install sendemail).\n O script foi abortado..\n">>$LOG_ERRO_BACKUP exit 1 else echo -e "$(date) O Pacote sendemail encontra-se instalado no servidor $(hostname)... \nBackup em andamento..." >>$LOG_ERRO_BACKUP fi } # Função utilizada que envia um e-mail informando o usuário/admin de que o backup está iniciando. backup_msg_inicio() { # Ajustando os valores da variáveis:. EMAIL_ASSUNTO="Backup do Filesystem $NOME_DIRETORIO_DESTINO iniciado, rodando no servidor $(hostname)" EMAIL_MENSAGEM="############### BACKUP INICIALIZADO ####################" echo -e "\nEnviado e-mail de testes.">>$LOG_ERRO_BACKUP # Realizado o envio da mensagem com o sendemail: sendemail -f $NOME_EMAIL_DEST -t $EMAIL_DESTINATARIO -u $EMAIL_ASSUNTO -m $EMAIL_MENSAGEM -s $EMAIL_SMTP_ADDR -xu $EMAIL_USER -xp $EMAIL_SENHA>info_smtp.tmp if [ $? != 0 ];then echo -e "$(date) ERRO: Problema ao enviar e-mail, abaixo verifique a saida do sendemail para constatar o problema, e então rode o backup novamente: $(cat info_smtp.tmp).\n">>$LOG_ERRO_BACKUP rm info_smtp.tmp exit 1 else echo -e "$(date) E-mail de testes enviado com sucesso, backup em andamento..">>$LOG_ERRO_BACKUP fi } # Funções do backup propiamente dito (.tar.gz) # Tamanho do backup backup_size(){ du -hs "$1" | cut -f1; } # Verificando enquanto a cópia do backup esta rodando backup_rodando() { ps $1 | grep $1 >/dev/null } # Auxiliar AUX=$(echo $NOME_DIRETORIO_DESTINO| cut -d"/" -f2) # função que inicia o backup backup_start() { # mensagem no arquivo de log echo -e "\n######### INICIANDO BACKUP ##########.">>$LOG_ERRO_BACKUP # inico do Backu /usr/bin/time -p -o info_time tar -cvzf ${AUX}`date +%Y_%m_%d__%H_%M_%S`.tar.gz "$1" } envia_msg_backup() { # após a realização do backup envia uma mensagem informando a realização correta # do backup com o nome do arquivo gerado. NOME_ARQUIVO=$(ls -la *.tar.gz|cut -d" " -f8) # Ajustando o valor das varíaveis: EMAIL_ASSUNTO="Backup do FileSystem $NOME_DIRETORIO_DESTINO realizado com sucesso na data $(date)" EMAIL_MENSAGEM="Atencao o backup de $NOME_DIRETORIO_DESTINO foi realizado com sucesso na data $(date).\n \n ######################################################################### \n \nInformacoes:\n \nNome do Diretorio a ser backupeado: $NOME_DIRETORIO_DESTINO.\n \nNome do Arquivo final: $NOME_ARQUIVO.\n \nTempo de Execucao do backup:\n $(cat info_time)\n \nNome do arquivo de Log: $LOG_ERRO_BACKUP\n \nData de criacao do Backup: $DATA_BACKUP\n \nHorario de Criacao do Backup: $HORARIO_BACKUP\n \n ######################################################################### \n " rm info_time # Realizado o envio da mensagem com o sendemail: sendemail -f $NOME_EMAIL_DEST -t $EMAIL_DESTINATARIO -u $EMAIL_ASSUNTO -m $EMAIL_MENSAGEM -s $EMAIL_SMTP_ADDR -xu $EMAIL_USER -xp $EMAIL_SENHA>>$LOG_ERRO_BACKUP if [ $? != 0 ];then echo -e "$(date) ERRO: Problema ao enviar e-mail, abaixo verifique a saida do sendemail para constatar o problema, e então rode o backup novamente: $(cat info_smtp.tmp).\n">>$LOG_ERRO_BACKUP rm info_smtp.tmp exit 1 else echo -e "$(date) backup finalizado com sucesso\n..">>$LOG_ERRO_BACKUP fi } # Função que move o backup realizado para o diretório informado no inicio do script: move_backup() { echo "$(date) INFO: Movendo o arquivo $NOME_ARQUIVO para o diretório $NOME_DIRETORIO_MOV.">>$LOG_ERRO_BACKUP /usr/bin/time -p -o info_mv mv $NOME_ARQUIVO $NOME_DIRETORIO_MOV if [ $? != 0 ];then # mensagem de sucesso INFO_ERRO="Anteção ouve um erro ao mover o arquivo $NOME_ARQUIVO para o diretório $NOME_DIRETORIO_MOV, verifique o ocorrido, e tente move-lo manualmente." sendemail -f $NOME_EMAIL_DEST -t $EMAIL_DESTINATARIO -u "ERRO na Alocação do Backup $NOME_ARQUIVO" -m $INFO_ERRO -s $EMAIL_SMTP_ADDR -xu $EMAIL_USER -xp $EMAIL_SENHA>>$LOG_ERRO_BACKUP echo $INFO_ERRO>>$LOG_ERRO_BACKUP rm info_mv else # mensagem de erro INFO_OK="O arquivo $NOME_ARQUIVO foi movido com sucesso para o diretório $NOME_DIRETORIO_MOV, na data $(date) com o tempo de $(cat info_mv)" sendemail -f $NOME_EMAIL_DEST -t $EMAIL_DESTINATARIO -u "Alocação do Backup $NOME_ARQUIVO realizado com sucesso" -m $INFO_OK -s $EMAIL_SMTP_ADDR -xu $EMAIL_USER -xp $EMAIL_SENHA echo $INFO_OK>>$LOG_ERRO_BACKUP rm info_mv fi } # Disparando as funções do script verifica_conexao # Para rodar em outra distro basta comentar (Colocar um # na frente) da linha abaixo. onde se econtra verifica_pckg_email. verifica_pckg_email backup_msg_inicio backup_start $NOME_DIRETORIO_DESTINO envia_msg_backup move_backup # Fim #####################################################################
Montar Imagem ISO no Nautilus-Script ou Nautilus-Actions
SPEEDY: Adicionando DNS no Resolv.conf
Nenhum comentário foi encontrado.
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Melhorando a precisão de valores flutuantes em python[AJUDA] (7)
Vou voltar moderar conteúdos de Dicas e Artigos (1)
SysAdmin ou DevOps: Qual curso inicial pra essa área? (3)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta