此脚本可以布置在自动任务crontab可以自动清理集群的listener日志,会先做一个.bak备份再把老的清理,并且同事也会清理除log.xml之外的log_*.xml
具体看脚本吧,在自己的环境下可以先尝试下
do_clear_11g(){
listener_group=$(ps -ef|grep tnslsnr|grep -v grep|awk '{print $(NF-1)}')
for listener in $listener_group
do
logxml=$(lsnrctl status $listener|grep "Listener Log File"|awk '{print $NF}')
len=${#logxml}
need=$(expr $len - 14)
logpath=$(echo $logxml|cut -c 1-"$need")
tracepath=$(echo $logpath"/trace")
logfile=$(ls -lt $tracepath|grep -i $listener|grep -i log|grep -v bak|awk 'NR==1 {print $NF}')
alertpath=$(echo $logpath"/alert")
find $alertpath -name log_*.xml -mtime +1 -exec rm {} \;
cp $tracepath"/"$logfile $tracepath"/"$logfile".bak"
>$tracepath"/"$logfile
done
}
do_clear_12c(){
listener_group=$(ps -ef|grep tnslsnr|grep -v grep|awk '{print $(NF-2)}')
for listener in $listener_group
do
logxml=$(lsnrctl status $listener|grep "Listener Log File"|awk '{print $NF}')
len=${#logxml}
need=$(expr $len - 14)
logpath=$(echo $logxml|cut -c 1-"$need")
tracepath=$(echo $logpath"/trace")
logfile=$(ls -lt $tracepath|grep -i $listener|grep -i log|grep -v bak|awk 'NR==1 {print $NF}')
alertpath=$(echo $logpath"/alert")
find $alertpath -name log_*.xml -mtime +1 -exec rm {} \;
cp $tracepath"/"$logfile $tracepath"/"$logfile".bak"
>$tracepath"/"$logfile
done
}
do_clear_10g(){
listener_group=$(ps -ef|grep tnslsnr|grep -v grep|awk '{print $(NF-1)}')
for listener in $listener_group
do
logpath=$(lsnrctl status $listener|grep "Listener Log File"|awk '{print $NF}')
cp $logpath $logpath".bak"
>$logpath
done
}
lsnr_path=`ps -ef|grep tnslsnr|grep -v grep|awk 'NR==1 {print substr($(NF-2),1,(length($(NF-2))-7))}'`
export ORACLE_HOME=`ps -ef|grep tnslsnr|grep -v grep|awk 'NR==1 {print substr($(NF-2),1,(length($(NF-2))-12))}'`
export PATH=$lsnr_path:$PATH
lsnr_version=`lsnrctl version|awk 'NR==2 {print substr($5,1,2)}'`
if [ $lsnr_version -eq 11 ] ;
then
do_clear_11g
fi
if [ $lsnr_version -eq 10 ] ;
then
do_clear_10g
fi
if [ $lsnr_version -eq 12 ] ;
then
do_clear_12c
fi