로그 파일 상단에 추가

로그 파일 상단에 추가

두 시스템 간의 재해 복구 프로세스를 모니터링하고 스크립트가 로그 파일을 생성하는 crontab 스크립트가 있습니다. 제가 요청받은 것은 기본적으로 생성된 새 로그를 하단이 아닌 이전 로그의 상단(동일한 파일 이름을 사용하고 있기 때문에)에 추가하는 것입니다.

몇 가지 옵션을 보았지만 모든 시도가 실패했습니다.

나는 전에 시도했다

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

그리고 또한

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

$LOGFILE 변수는 스크립트가 프로세스를 연결하는 각 명령문의 위치입니다.

감사해요:)

기본적으로 내가 원하는 것은 메일을 통해 보내기 전에 마지막 실행 위에 올바른 로그를 생성하는 것입니다.

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

답변1

현재 실행 중인 로그를 기존 로그 파일의 시작 부분에 "추가"(삽입)하려면 TEMPLOG 파일을 사용해 보십시오. 스크립트의 모든 출력/데이터를 해당 $TEMPLOG 파일에 쓴 후 다음을 수행하십시오.

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

$LOGFILE의 0행 뒤에 r$TEMPLOG를 작성합니다 .

예를 들어:

$ 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

쉘이 here-strings를 지원하지 않으면 대신 ed의 stdin에 지침을 인쇄하십시오.

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

다음이 꼭 필요한 경우이메일변경하려면 $LOGFILE 자체 대신 메일 파이프라인에 추가하면 됩니다.

cat "$TEMPLOG" "$LOGFILE" | mailx -r ${DBOPS} -s "SUCCESS" ${EMAILTO}

답변2

귀하의 스크립트가 에 첨부되어 있으므로 $LOGFILE귀하가 원하는 것은

mv $LOGFILE $TEMPLOG

처음에 그리고

cat $TEMPLOG >>$LOGFILE

메일 보내기 직전.

관련 정보