Shell script para backup: nova versão

    Outro dia atualizei o que faltava no meu shell script para fazer backup usando o rsync.

    Adicionei o wakeonlan para ligar a máquina remotamente (necessário descobrir o HW address da sua máquina de destino e se certificar de que é possível ligá-la remotamente — possível que tenha que ativar essa opção na BIOS), dei uma arrumadinha, incluí a opção de excluir arquivos e pastas do backup (ver abaixo) e adicionei num cron job para fazer um backup diário. Além disso, o script desliga a máquina depois do fim do backup. Aqui está:

    #!/bin/bash
    
    # Script para backup via SSH usando o rsync
    # Versão 0.8 - 2009/09/05
    
    # # # # # # Configuração # # # # # #
    
    # Mude os parâmetros abaixo, referentes ao seu sistema
    
    # Arquivo log
    LOG=/home/user0/.backup`date +%Y-%m-%d`.log
    
    # IP ou hostname da máquina de destino
    DESTINO=destino.local
    
    # Usuário no destino
    USR=user1
    
    # Diretório de destino
    DIR=/home/user1/Backup/
    
    # Diretório de origem
    SRC=/home/user0
    
    # Arquivo com lista de arquivos e diretórios
    # que não serão incluídos no backup
    EXCLUIR=/home/user0/.rsync/exclude
    
    # HW address
    HW=00:ee:dd:cc:bb:aa
    
    # # # # # # Configuração # # # # # #
    
    # # # # # # #  Funções # # # # # # #
    
    function ligada
    {
    # Checar se a máquina de destino está ligada
    echo -e "Checando se $DESTINO está ligada..."
    /bin/ping -c 1 -W 2 $DESTINO > /dev/null
    if [ "$?" -ne 0 ]; then
    return 1
    else
    return 0
    fi
    }
    
    function run_backup
    {
    HORA_INI=`date +%s`
    echo -e `date +%c` >> $LOG
    echo -e "\n$DESTINO ligado!" >> $LOG
    echo -e "Iniciando o backup...\n" >> $LOG
    rsync -ah --delete --stats --progress --log-file=$LOG --exclude-from=$EXCLUIR -e ssh $SRC $USR@$DESTINO:$DIR
    HORA_FIM=`date +%s`
    TEMPO=`expr $HORA_FIM - $HORA_INI`
    echo -e "\nBackup finalizado com sucesso!" >> $LOG
    echo -e "Duração: $TEMPO s\n" >> $LOG
    echo -e "--- // ---\n" >> $LOG
    echo -e "\nBackup finalizado com sucesso!"
    echo -e "Duração: $TEMPO s\n"
    echo -e "Consulte o log da operação em $LOG.\n"
    }
    
    # # # # # # # Funções  # # # # # # #
    
    # # # # # # # Programa # # # # # # #
    
    # Checar se a máquina de destino está ligada
    ligada
    if [ "$?" -eq "1" ]; then
    echo -e "\n$DESTINO desligado. Tentando acordá-lo..."
    wakeonlan $HW
    echo -e "\nPacote mágico enviado. Aguarde."
    sleep 70
    ligada
    if [ "$?" = "1" ]; then
    echo -e `date +%c` >> $LOG
    echo -e "\n$DESTINO desligado." >> $LOG
    echo -e "Backup não realizado\n" >> $LOG
    echo -e "--- // ---\n" >> $LOG
    echo -e "\n$DESTINO desligado."
    echo -e "Backup não realizado.\n"
    else
    echo -e "\n$DESTINO ligado! Começando o backup..."
    run_backup
    fi
    else
    echo -e "\n$DESTINO ligado! Começando o backup..."
    run_backup
    fi
    
    echo -e "Desligando o $DESTINO..."
    ssh $USR@$DESTINO 'sudo halt'
    echo -e "Pronto. Tchau!"
    
    # # # # # # # Programa # # # # # # #
    
    # # # # # # # Afazeres # # # # # # #
    #
    #	- Criar alça para quando a transferência falhar (e.g.,falta de espaço)
    

    Meu arquivo exclude, com a lista de arquivos e pastas que não serão incluídas no backup ficou assim:

    .thumbnails/
    Picasa.ini
    Thumbs.db
    .local/share/Trash/
    .cache/
    .gvfs/

    Comments 3

    1. Paul wrote:

      gostei!

      Posted 26 jan 2010 at 2:22 pm
    2. Juliano wrote:

      Esse script de backup é FANTÁSTICO, PERFEITO para o que estou precisando, ele serve para estações que tenham win XP ou 7 para enviar o backup ao windows server 2008??? Valeuuuuu

      Posted 09 jun 2010 at 2:46 pm
    3. nelas wrote:

      Oi Juliano, não faço idéia. Você está dizendo rodar o script por uma máquina com linux para enviar o backup para a máquina com windows? Se for isso talvez até funcione se vc tiver ssh instalado no windows (e o rsync). Agora rodar o script partir do windows acho que não funciona não… teria que portar pra outra linguagem como python ou perl.

      Posted 10 jun 2010 at 11:01 am

    Trackbacks & Pingbacks 1

    1. From OrgaNeLaS - Shell script para backup usando rsync e ssh em DHCP no Ubuntu on 28 mar 2010 at 2:13 pm

      [...] [Fiz uma versão nova, mais completa, deste script. Confira aqui.] [...]

    Post a Comment

    Your email is never published nor shared. Required fields are marked *