+ Responder ao Tópico



  1. #1
    Avatar de luandotto
    Ingresso
    Jul 2011
    Localização
    Brumado- Bahia
    Posts
    133
    Posts de Blog
    7

    Exclamation Script para verificar arquivos parados em diretorio

    Bom dia a todos!

    Criei o script abaixo para monitorar se existem arquivos parados em um determinado diretório, ele faz o processo corretamente, no entanto se ele não encontra o arquivo especificado o script da erro e aborta, precisava que ele continuasse e acessasse os demais diretórios.

    Alguém sabe o que fazer para que ele continue em caso de erro?

    A mensagem retornada é essa:
    impossível obter estado de '/mnt/ba/0046/ocp/in/*.XML': Arquivo ou diretório não encontrado
    /etc/MonitoramentoOCP.sh: linha 42: 1487078249 - : erro de sintaxe: operando esperado (token com erro é "- ")

    Código :
     
    #!/bin/bash
     
     
    # Luan Dotto
     
     
    # Configuracoes
    TEMPO="600" 
     
     
    DIR="/mnt/ba/" 
     
     
    ESPERA="30" 
     
     
    ESCREVE="/etc/log.txt" 
     
     
    function acao ()
    {
       MIN=$(( $2 / 60 % 60))
       HOR=$(( $2 / 60 / 60))
       SEG=$(( $2 - ($HOR * 60 * 60 + $MIN * 60) ))
      echo "Arquivo $1 esta parado a ${HOR}h${MIN}m${SEG}s" >> $ESCREVE
     
    }
     
     
    # Funcao principal
     
     
    echo "Programa inicio em `date` nos diretorios $DIR" >> $ESCREVE
    while true
    do 
    #cat /dev/null > $ESCREVE
     
        AGORA="`date "+%s"`"
        for d in /mnt/ba/[0-9][0-9][1-9][0-9]
        do
        #then 
            echo $d
            for a in $d
            do
            echo $a
                ESTADO="`stat -c "%X" $a/ocp/in/*.XML`"
                PASSOU="$(( $AGORA - $ESTADO ))"
                if [ $PASSOU -gt $TEMPO ]
                then
                    acao $a $PASSOU
                fi
            done
        #else
          # echo Nenhum Arquivo parado 
        #fi
        done
        echo "Existem OCP paradas no diretorio //172.22.5.35/integ/UNB/ocp/in verifique anexo" | mutt -s "Existem OCP Paradas" -a /etc/log.txt -- [email protected]
        sleep $ESPERA
    done

  2. #2
    Avatar de luandotto
    Ingresso
    Jul 2011
    Localização
    Brumado- Bahia
    Posts
    133
    Posts de Blog
    7

    Padrão

    Esperava que alguém fosse contribuir, mas infelizmente não rolou...

    De toda forma, consegui resolver, segue abaixo código comentado para que possam fazer uso se necessario.

    Código :
    #!/bin/bash
    # Criado por Luan Dotto com base no script do Elgio do fórum viva o Linux
     
     
    # Configuracoes
    TEMPO="600" [COLOR=#000000]# Quanto tempo parado? 20m = 1200 seg[/COLOR]
     
    #Diretorios que iremos monitorar, os [0-9] utilizei para pegar todos os sub-diretorios que #são compostos por numero, mas pode ser informado apenas /var/log
     
    DIR="/mnt/sul/[0-9][0-9][1-9][0-9]/ocp/in /mnt/mg/[0-9][0-9][1-9][0-9]/ocp/in /mnt/sp/[0-9][0-9][1-9][0-9]/ocp/in /mnt/co/[0-9][0-9][1-9][0-9]/ocp/in" 
     
    #Tempo que será utilizado no sleep, para o script rodar novamente (para fazer o loop)
    ESPERA="300"
     
    #Onde o log será gravado
    ESCREVE="/etc/log.txt"
     
     
    function acao ()
    {
       MIN=$(( $2 / 60 % 60))
       HOR=$(( $2 / 60 / 60))
       SEG=$(( $2 - ($HOR * 60 * 60 + $MIN * 60) ))
      echo -e "Arquivo $1 esta parado a ${HOR}h${MIN}m${SEG}s" >> $ESCREVE
    }
     
     
     
     
    # Funcao principal
    echo -e "Programa inicio em `date` nos diretorios ..integ/ocp/in" >> $ESCREVE
    while true
    do
        AGORA="`date "+%s"`"
        for d in $DIR
        do
            echo -e $d
            if [ `ls $DIR|grep -ci xml$` -ne 0 ];
            then
            for a in $d
            do
            echo -e $a
                ESTADO="`stat -c "%X" $a|grep -ci xml$`"
                PASSOU="$(( $AGORA - $ESTADO ))"
                if [ $PASSOU -gt $TEMPO ]
                then
                    acao $a $PASSOU
                fi
            done
        #done
        echo -e "Existe calculos de OCP pendentes a mais de 10min, verifique log anexo \n O arquivo PromaxAll.pid foi excluido, acesse a rotina 03.02.36.08 da unidade mostrada no log e acompanhe se nos proximos 15min as OCPs serão calculadas. \n Caso não possua usuario Promax, procure a equipe noturna, caso não tenha retorno ou equipe não esteja mais presente, acionar o plantão." | mutt -s "Existem calculos de OCPs pendentes" -a /etc/log.txt -- [EMAIL="[email protected]"][email protected][/EMAIL]
          #Limpar o arquivo de log  
         cat /dev/null > $ESCREVE
        else
              echo -e "Nenhum Calculo de OCP parado parado no diretorio"  >> $ESCREVE
                fi
        done
        sleep $ESPERA
    done

  3. #3

    Padrão Re: Script para verificar arquivos parados em diretorio

    Cara, não use assim, é melhor usar o cron para "chamar" seu script, outra coisa, esse termo "arquivo parado" é coisa de amador mesmo, o termo correto é "verificar se existem" arquivos de determinada extensão dentro de determinado diretório. E eu jamais usaria o 'ls' para fazer isso, estude um pouco mais e resolva com o 'find', não adianta vir aqui achando que fez uma invenção extraordinária. É algo simples com alguns minutos de Google isso já fica mais claro... E tem mais, acho que você complicou muito para chegar ao resultado, existe um princípio chamado KISS = Keep It Simple Stupid = mantenha simples, estúpido!

    http://stackoverflow.com/questions/3...s-in-directory

    Enviado via XT1580 usando UnderLinux App