shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Script de backup


From: Tiago Barcellos Peczenyj
Subject: Re: [shell-script] Script de backup
Date: Fri, 16 Feb 2007 17:31:00 -0200

Fagner,

em virtude do tamanho do seu arquivo, acho que vc deveria pensar em
algumas simplificacoes como esta

testar_diretorio(){
if [ -d "${1}" ] ; then # eu passo um parametro so... ;-)
   echo "DIRETORIOS '${1}' ENCONTRADO ...OK"
else
   echo "ERRO, SCRIPT NÃO ENCONTROU O DIRETORIO '$1'"
   return 1; # propagar o erro pra "cima"!
fi
}

...
DIRETORIOS=(${ANOTACOES} ${CONF} ... ${LINUX} ${SCRIPTS} ${TMP} ${MAIL})

for DIR in ${DIRETORIOS[@]}; do
   testar_diretorio ${DIR}
done


vc agrupou as funções de acordo com o objetivo delas, mas acho que vc
poderia substituir esta forma de pensar pelo uso de funções de acordo
com a 'repetitividade' delas no teu script. so dessa forma seu script
deve ficar 60% menor.

outra coisa interessante seria vc OU executar o script ja
redirecionando a saida para o seu log, ou então unir a saida padrão (e
a de erro, por que não?) para o seu log com um unico comando

LOG=/path/to/logfile
ERR=/path/to/errfile
exec 1> ${LOG}
exec 2> ${ERR}

ou

exec 2>&1

dessa forma vc evita fazer >> ${...} em cada echo.

por fim, eu sugiro que vc faça algo como

if [ -d ${PASTA_DESTINO} ];then
   echo "mensagem boa"
else
   echo "mensagem ruim"

   while mount opcoes ;do
       echo "TENTANDO MONTAR DIRETORIO"
       sleep 10
   done
   echo "COMPARTILHAMENTO MONTADO...OK"
fi

Eh claro que, ficar tentando montar a cada 10 segundos pode não ser
uma boa estrategia, afinal por que vc não conseguiria montar? vc
deveria interpretar o error code que o mount retorna, veja o man, por
exemplo:

Boa Sorte

Tiago

On 2/16/07, fagnerpo <address@hidden> wrote:






Ola pessoal, venho nos ultimos dias procurando uma solução para o meu
 problema mas não tenho obtido sucesso. Sou mais um novato no shell
 Script, apanhando do tio Bash, estou criando um script de backup( meu
 primeiro script),e estou com problemas, espero que tenha alguém que
 possa me auxiliar neste scripts !!!! estou colocando ele abaixo e
 citando os erros correntes...

 ##################################################
 #!/bin/bash

 cd /dados/bkp
 DIA=`date +%A`
 PASTA_DESTINO="/mnt/2nv_srv/vm/2NV/Fagner/"
 DIR_LOG="/dados/bkp/"
 LOG="bkp-$DIA.log"
 DATA="date +%d/%m/%Y"
 HORA="date +%H:%M"
 MOUNT="mount | grep vm"
 MNT_REMOTO="mount -t cifs -o username=fpires,password=d29m07
 //172.16.129.180/vm /mnt/2nv_srv/vm"
 TAMANHO="du -h bkp-$DIA.tar.gz"

 ### DIRETORIOS QUE DEVEM SER REALIZADO BKP

 ANOTACOES="/dados/anotacoes/"
 CONF="/dados/arq.conf/"
 CONTROLES="/dados/controles/"
 DOCUMENTACAO="/dados/documentacao/"
 PACKAGES="/dados/packages/"
 LINUX="/dados/linux/"
 SCRIPTS="/dados/scripts/"
 TMP="/dados/temp/"
 MAIL="/root/.mozilla-thunderbird/"
 DIRETORIOS="$ANOTACOES $CONF $CONTROLES $DOCUMENTACAO $PACKAGES $LINUX
 $SCRIPTS $TMP $MAIL"

 ### VERIFICANDO SE A PASTA DESTINO EXISTE, CASO NÃO EXISTA, O PROCESSO
 SERÁ ABORTADO

 function testes_dest
 {
    if [ ! -d $PASTA_DESTINO ]
     then
     echo "ERRO, SCRIPT NÃO ENCONTROU O DIRETORIO DE DESTINO, TENTANDO
 MONTAR O DESTINO !!!" >> $DIR_LOG/$LOG
        else
     echo "DIRETORIO DE "$DESTINO" ENCONTRADO...OK" >> $DIR_LOG/$LOG
     fi
    while [ `$MOUNT` == "" ]
     do
     echo "TENTANDO MONTAR DIRETORIO" >> $DIR_LOG/$LOG
     `$MNT_REMOTO`
        sleep 10
     done
 echo "COMPARTILHAMENTO MONTADO...OK" >> $DIR_LOG/$LOG
 }

 function testes_dir
 {
 echo "REALIZANDO TESTES PARA VERIFICAR INCONSISTENCIAS NOS DIRETORIOS"
 >> $DIR_LOG/$LOG

 ### VERIFICANDO SE OS DIRETORIOS A SEREM REALIZADOS BKP, EXISTE !!!
 if [ ! -d $ANOTACOES ]
 then
 echo "ERRO, SCRIPT NÃO ENCONTROU O DIRETORIO $ANOTACOES !!!" >>
 $DIR_LOG/$LOG
 else
     echo "DIRETORIOS "$ANOTACOES" ENCONTRADO ...OK" >> $DIR_LOG/$LOG
    fi

 if [ ! -d $CONF ]
 then
 echo "ERRO, SCRIPT NÃO ENCONTROU O DIRETORIO $CONF !!!" >> $DIR_LOG/$LOG
 else
     echo "DIRETORIO "$CONF" ENCONTRADO ...OK" >> $DIR_LOG/$LOG
    fi

 if [ ! -d $CONTROLES ]
 then
 echo "ERRO, SCRIPT NÃO ENCONTROU O DIRETORIO $CONTROLES !!!" >>
 $DIR_LOG/$LOG
 else
     "DIRETORIO "$CONTROLES" ENCONTRADOS ...OK" >> $DIR_LOG/$LOG
    fi

 if [ ! -d $DOCUMENTACAO ]
 then
 echo "ERRO, SCRIPT NÃO ENCONTROU O DIRETORIO $DOCUMENTACAO !!!" >>
 $DIR_LOG/$LOG
 else
     echo "DIRETORIO "$DOCUMENTACAO" ENCONTRADO...OK" >> $DIR_LOG/$LOG
    fi

 if [ ! -d $PACKAGES ]
 then
 echo "ERRO, SCRIPT NÃO ENCONTROU O DIRETORIO $PACKAGES !!!" >>
 $DIR_LOG/$LOG
 else
     echo "DIRETORIO "$PACKAGES" ENCONTRADO...OK" >> $DIR_LOG/$LOG
    fi

 if [ ! -d $LINUX ]
 then
 echo "ERRO, SCRIPT NÃO ENCONTROU O DIRETORIO $LINUX !!!" >> $DIR_LOG/$LOG
 else
     echo "DIRETORIO "$LINUX" ENCONTRADO...OK" >> $DIR_LOG/$LOG
    fi

 if [ ! -d $SCRIPTS ]
 then
 echo "ERRO, SCRIPT NÃO ENCONTROU O DIRETORIO $SCRIPTS !!!" >>
 $DIR_LOG/$LOG
 else
     echo "DIRETORIO "$SCRIPT" ENCONTRADO...OK" >> $DIR_LOG/$LOG
    fi

 if [ ! -d $TMP ]
 then
 echo "ERRO, SCRIPT NÃO ENCONTROU O DIRETORIO $TMP !!!" >> $DIR_LOG/$LOG
 else
     echo "DIRETORIO "$TMP" ENCONTRADO...OK " >> $DIR_LOG/$LOG
    fi

 if [ ! -d $MAIL ]
 then
 echo "ERRO, SCRIPT NÃO ENCONTROU O DIRETORIO $MAIL !!!" >> $DIR_LOG/$LOG
 else
     echo "DIRETORIO "$MAIL" ENCONTRADO...OK" >> $DIR_LOG/$LOG
    fi
    }
 function faz_bkp
 {
    echo "INICIO DO BACKUP DO DIA "`$DATA`" AS "`$HORA`" " >> $DIR_LOG/$LOG
    cd $BKP
    tar zcvf bkp-$DIA.tar.gz $DIRETORIOS
    echo "O TAMANHO DO BKP FOI DE: `$TAMANHO` " >> $DIR_LOG/$LOG
    echo " FIM DO BACKUP DO DIA `$DATA` AS `$HORA` " >> $DIR_LOG/$LOG
 }
 function cp_server
 {
    cd $BKP
    echo "ENVIANDO BKP PARA SERVER REMOTO" >> $DIR_LOG/$LOG
    cp -rf bkp-$DIA.tar.gz $PASTA_DESTINO >> $DIR_LOG/$LOG
    echo "ENVIADO BKP PARA SERVER REMOTO...OK" >> $DIR_LOG/$LOG
 }
 ### CHAMANDO AS FUNÇÕES
 testes_dest
 testes_dir
 faz_bkp
 cp_server

 exit 0
 ################################################
 ERROS OCORRIDOS :

 Uso: mount -V : mostra versão
 mount -h : mostra esta ajuda
 mount : lista sistemas de arquivos montados
 mount -l : idem, incluindo rótulos de volumes
 Estas eram as opções de informação. Agora as de montagem.
 O comando é `mount [-t tipoSA] alguma-coisa algum-lugar'.
 Detalhes encontrados em /etc/fstab podem ser omitidos.
 mount -a [-t|-O] ... : monta tudo contido em /etc/fstab
 mount dispositivo : monta dispositivo no lugar conhecido
 mount diretório : monta dispositivo conhecido aqui
 mount -t tipo disp dir : comando normal de montagem
 Note que não se monta realmente um dispositivo, monta-se um
 sistema de arquivos (de um determinado tipo) encontrado no dispositivo.
 Pode-se montar também em outro lugar uma árvore de diretórios
 anteriormente visível:
 mount --bind dir-antigo dir-novo
 ou mover uma sub-árvore:
 mount --move dir-antigo dir-novo
 Um dispositivo pode ser informado pelo nome, digamos /dev/hda1 ou
 /dev/cdrom,
 ou por um rótulo, usando -L rótulo ou por uuid, usando -U uuid.
 Outras opções: [-nfFrsvw] [-o opções] [-p passwdfd].
 Para mais detalhes, consulte `man 8 mount'.
 backup.sh: line 40: [: ==: operador unário esperado
 backup.sh: line 72: DIRETORIO /dados/controles/ ENCONTRADOS ...OK:
 Arquivo ou diretório inexistente
 ################################################

 É obvio que eu errei os mount e o laço while, onde testo o mount, bom
 conto com a análise de vocês, valew pela forca pessoal ! abraços ...




--
Tiago B Peczenyj
Linux User #405772

# cd /pub
# more beer


reply via email to

[Prev in Thread] Current Thread [Next in Thread]