Anexa ao topo em um arquivo de log

0

Eu tenho um script crontab que monitora um processo de DR entre duas máquinas e esse script gera um arquivo de log. O que me pediram para fazer é basicamente acrescentar o novo log gerado no topo do anterior (como log eu uso o mesmo nome de arquivo) e não na parte inferior.

Já vi poucas opções, mas todas as minhas tentativas falharam.

Eu tentei com

cat $LOGFILE >> $TEMPLOG
rm $LOGFILE
mv -i $TEMPLOG $LOGFILE

e também com

cat - $LOGFILE > $TEMPLOG && mv $TEMPLOG $LOGFILE

a variável $ LOGFILE é onde o script anexa todas as instruções do processo.

Obrigado :)

Basicamente, eu gostaria de fazer é gerar o log correto com a última execução antes de ser enviado pelo correio.

DATE='date "+%d%m%y_%H%M"'
PRIMARY_HOSTNAME='hostname'
LOGFILE=/dba/logs/monitor_sync_FM2.log
TEMPLOG=/dba/logs/monitor_sync_LOG.log
SERVER='hostname'
SITE=mycompany
EMAILTO="[email protected]"
DBOPS="oracle@${SERVER}.${SITE}"

export PRIMARY_HOSTNAME LOGFILE TEMPLOG SERVER SITE EMAILTO DBOPS DATE
echo "\n\n### monitor DR sync  started @ 'date' ###" >> $LOGFILE
echo "Running SQL command to verify latest SCN.." >> $LOGFILE
echo "The current SCN of the Primary DB server is: $PRIMARY_CURRENT_SCN" >> $LOGFILE

echo "Connecting now to the secondary standby database server..." >> $LOGFILE
SECONDARY_CURRENT_SCN='ssh [email protected] /home/oracle/script_sync2.sh' >> $LOGFILE
export SECONDARY_CURRENT_SCN
echo "Secondary SCN output returned as: $SECONDARY_CURRENT_SCN" >> $LOGFILE
grep ORA- /dba/scripts/output.txt
if [ $? = 0 ]; then
echo "Remote ssh command to Secondary server failed..Exiting" >> $LOGFILE
echo "### monitor DR sync failed @ 'date' ###" >> $LOGFILE
echo "PROBLEM" >> $LOGFILE

mailx -r ${DBOPS} -s "PROBLEM" ${EMAILTO} < $LOGFILE
exit
else
echo "The current SCN of the Secondary DB server is: $SECONDARY_CURRENT_SCN" >> $LOGFILE
DIFF='expr $PRIMARY_CURRENT_SCN - $SECONDARY_CURRENT_SCN' ; export DIFF
if [ $PRIMARY_CURRENT_SCN -ne $SECONDARY_CURRENT_SCN ]; then
        echo "The difference is $DIFF" >> $LOGFILE
        if [ 'echo $DIFF' -gt 3 ]; then
                echo "Log Gap: $DIFF" >> $LOGFILE
                                echo "PROBLEM" >> $LOGFILE
                                echo "### script finished @ 'date' ###\n\n" >> $LOGFILE
                mailx -r ${DBOPS} -s "PROBLEM" ${EMAILTO}  < ${LOGFILE}
        else
                                echo "SUCCESS" >> $LOGFILE
                mailx -r ${DBOPS} -s "SUCCESS" ${EMAILTO}  < ${LOGFILE}
                echo "Log Gap: $DIFF" >> $LOGFILE
        fi
else
echo "Log Gap: $DIFF" >> $LOGFILE
echo "SUCCESS" >> $LOGFILE
mailx -r ${DBOPS} -s "SUCCESS" ${EMAILTO}  < ${LOGFILE}
fi
fi
    
por FaMontyN2 06.11.2017 / 16:58

2 respostas

1

Se você quiser "anexar" (inserir) os logs da execução atual no início do arquivo de log existente, siga com sua aparente tentativa de usar um arquivo TEMPLOG. Grave todos os dados / saída do script no arquivo $ TEMPLOG e faça:

ed -s $LOGFILE <<< "0r $TEMPLOG"$'\n'wq

Para r ead $ TEMPLOG em $ LOGFILE após a linha zero.

Como exemplo:

$ cat logfile
previous
entries
here
$ cat templog
New
Entry goes
Here
$ ed -s "$LOGFILE" <<< "0r $TEMPLOG"$'\n'wq
$ cat logfile
New
Entry goes
Here
previous
entries
here

Se o seu shell não suporta aqui-strings, imprima as instruções para o stdin do ed:

printf "0r $TEMPLOG\nwq\n" | ed -s logfile

Se você precisa apenas que o conteúdo do e-mail seja alterado, e não o $ LOGFILE propriamente dito, apenas o preencha no pipe para o mail:

cat "$TEMPLOG" "$LOGFILE" | mailx -r ${DBOPS} -s "SUCCESS" ${EMAILTO}
    
por 06.11.2017 / 18:13
0

Como seu script é anexado a $LOGFILE , acho que o que você quer é

mv $LOGFILE $TEMPLOG

no começo e

cat $TEMPLOG >>$LOGFILE

pouco antes do envio.

    
por 08.11.2017 / 17:51