سؤال تجنب تكرار العروض أثناء الزحف للحصول على نمط


لقد قمت بكتابة برنامج نصي shell يقرأ سجلات التحديث ويرسل إعلامًا بالبريد الإلكتروني عندما يكون هناك OOM باستخدام do while while loop.

يمكنني الحصول على إشعار البريد الإلكتروني لأخطاء OOM ولكن في كل مرة يتم الحصول على إنشاء PID مكرر للبريد الإلكتروني المرسلة وهو إنشاء رقم ضخم. من الازدواجية في حين أنا grepping لتلك العملية / خادم خادم معين (weblogic). PFB السيناريو الخاص بي ، هل هناك أي طريقة أستطيع تجنب PIDs مكررة ، ويمكن الحصول على PID الأم فقط أثناء القيام grep.

#!/bin/sh
# Script to read the updating log file and send mail for any errors : LogCheck.sh
# SET VARIABLES
logfile=BEA_HOME/SERVERS/Admin.log
pattern="java.lang.OutOfMemoryError: Java heap space" 

#Read each line as it gets updating to the log file
tail -fn0 $logfile | while read line ; do 

    #check each line for our pattern
    echo "$line" | grep -i "$pattern"

    #Perform the below action if a line matches with our pattern
    if [ $? = 0 ]; 

    then
        #Send an email 
        echo "Found an error: $line" | mailx -s "please check the error" emailID 
    fi

done

4
2017-07-13 06:35


الأصل




الأجوبة:


يمكنك استخدام uniq أو sort -u:

echo "$line" | grep -i "$pattern" | uniq

4
2017-07-13 07:17



مرحبا ، شكرا لك على الاقتراح. حاولت استخدام هذه الخيارات ولكن عندما أستخدم uniq أو sort -u ، لا أتلقى إعلامًا بالبريد الإلكتروني لرسالة "java.lang.OutOfMemoryError: Java heap space" ، والحصول على إشعارات الرسائل الأخرى. أيضا عندما أفعل grep i.e ps -ef | grep AdminServer - جنبا إلى جنب مع PID الأم أنها تنتج بعض PIDs أخرى مثل أدناه .. - user174783


ps wp PID|grep PID

أنت تفعل ذلك دون grep - ستجد مع grep قمت بإزالة الرأس ..


0
2017-08-23 22:54