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.483 ]
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 #####################################################################
Para quem é louco por linux mas não larga o windows por causa do PHP
Mostrar conifguração da placa de rede
Nenhum comentário foi encontrado.
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
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
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Cups: Mapear/listar todas as impressoras de outro Servidor CUPS de forma rápida e fácil
Criando uma VPC na AWS via CLI
Tem como instalar o gerenciador AMD Adrenalin no Ubuntu 24.04? (7)