Questão Evite pids duplicados ao usar um padrão


Eu escrevi um script de shell que lê os logs de atualização e envia uma notificação por e-mail quando há OOM usando do while loop.

Eu sou capaz de obter a notificação por e-mail para erros OOM, mas toda vez que um PID duplicado está sendo gerado para o e-mail enviado que está criando um enorme não. de pids duplicados, enquanto estou grepping para esse processo em particular / servidor Admin (weblogic). PFB meu script, existe alguma maneira que eu possa evitar os PIDs duplicados e pode obter apenas PID pai ao fazer um 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


origem




Respostas:


Você pode usar uniq ou sort -u:

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

4
2017-07-13 07:17



Oi, obrigado pela sugestão. Eu tentei usar essas opções, mas quando eu uso uniq ou sort -u, eu não estou recebendo a notificação por e-mail para a mensagem "java.lang.OutOfMemoryError: Java heap space", obtendo as notificações para outras mensagens. Também quando eu faço um grep, por exemplo, ps -ef | grep AdminServer - junto com o pai pid ele está produzindo alguns outros PIDs como abaixo .. - user174783


ps wp PID|grep PID

Você pode fazê-lo sem o grep - você encontrará com o grep que você remove o cabeçalho.


0
2017-08-23 22:54