Solaris 8 - diretórios perdidos; Este roteiro de faxina é o culpado?

1

Nosso provedor de serviços de TI terceirizado executa o seguinte script pelo cron para limpar os arquivos core e de rastreio do Oracle. É claro que não é um script bem escrito, mas a minha pergunta para a multidão Serverfault é se existe um erro ou uma condição de contorno que o faria remover outros diretórios, como estes:

/ ora / admin / SCRM01P / bdump / ora / admin / SCRM01P / cdump / ora / admin / SCRM01P / pfile / ora / admin / SCRM01P / udump

Recentemente, esses diretórios foram excluídos em um sistema de produção, causando falha no Oracle. Dê uma olhada neste código. Sua percepção é apreciada, já que eu não sou muito bom no shell Korn.

#!/usr/bin/ksh 
#This script check the utilization of the location "/ora/admin/SCRM01P" 
#and if this exceeds the threshold which is 75%, then it attemps to remove all of the 
#core dump files which are "core_*" and "cdmp_*" 
#Otherwise, is removes these core dumps that are older than 7 days 
 THRESHOLD=75 
 MTIME=7 
 TOP_DIR=/ora/admin/SCRM01P 
 cd ${TOP_DIR} 
 USED=$(df -k ${TOP_DIR} |tail -1|awk '{print $5}'|grep \%|sed 's/%//') 
 [ ${USED} -gt ${THRESHOLD} ] && MTIME=-1 
 find ${TOP_DIR}/* -mtime +${MTIME} -type d \( -name "core_*" -o -name "cdmp_*" \) 2>/dev/null|while read DIRTOREMOVE 
 do 
        rm -rf $DIRTOREMOVE 
        #Due to a known Soralis issue, the directory may not be removed by the command above 
        rmdir $DIRTOREMOVE >/dev/null 2>&1 
 done 
 find ${TOP_DIR}/* -mtime +${MTIME} -name "*.trc"  -size +2000 2>/dev/null|while read TRACE_FILE 
 do 
        cp /dev/null ${TRACE_FILE} 
 done 
    
por Dave 13.01.2012 / 05:01

2 respostas

2

Uma condição poderia ser se esse tipo de diretório existisse (observe o espaço):

/ora/admin/SCRM01P/bdump secondword/core_foo

O comando while separa as palavras pelo espaço em branco, portanto, o corpo do loop while seria chamado duas vezes, uma vez com /ora/admin/SCRM01P/bdump e uma vez com secondword/core_foo .

    
por 14.01.2012 / 19:15
2

Você pode testar isso sozinho. mude o

    rm -rf $DIRTOREMOVE 
    #Due to a known Soralis issue, the directory may not be removed by the command above 
    rmdir $DIRTOREMOVE >/dev/null 2>&1 

para

echo "Deleting $DIRTOREMOVE"

e, em seguida, altere

cp /dev/null ${TRACE_FILE}

para

echo "Truncating ${TRACE_FILE}"

O que deve mostrar o que está sendo trabalhado.

    
por 14.01.2012 / 20:04