Avatar billede maskinen2000 Nybegynder
23. juni 2002 - 06:27 Der er 5 kommentarer og
1 løsning

Grep + reg.exp

Hey, jeg har et lille problem med nogle mod_perl scripts som åbenbart bruger en del RAM. Derfor har jeg forsøgt at lave et lille script som kigger på ps aux og hvis apache processorne er over 20000+ så genstarter den apache. Min grep ser sådan ud:

if /bin/ps aux | /bin/grep "^apache.*19[0-9]\{3\}.*/usr/sbin/httpd" ; then

Problemet er nu at jeg pt har nogle pid der også hedder 19***, som f.eks.

apache  19355  1.8  3.1 88148 16220 ?      S    06:25  0:01 /usr/sbin/httpd

Hvordan kan jeg få ovenstående grep til at "kigge over" første kolonne af tal - eller f.eks. skippe de "næste" 10 karakterer eller sådan noget.. så jeg er sikker på at resultatet bliver korrekt?

Nogen der ved det?
Mv* Maskinen2000
Avatar billede maskinen2000 Nybegynder
23. juni 2002 - 06:28 #1
Det tal jeg skal sammenligne er i den kolonne hvor der står "16220"

:-)
Avatar billede Soren L. Hansen Nybegynder
23. juni 2002 - 20:58 #2
Det kan man gøre med awk. I dit tilfælde:

awk -- '$6 ~ /regex/ { print "Found" }'

egrep kunne sådan set også gøre det:
egrep "^[^ \t]*[ \t]*[^ \t]*[ \t]*[^ \t]*[ \t]*[^ \t]*[ \t]*[^ \t]*[ \t]*regex.*"

men det er ikke helt så elegant. :-))

Det var svar på dit spørgsmål. Her er så, hvordan jeg ville gøre det samme (selvom det jo ikke var det du spurgte om):

ps aux | awk -- ' $11 ~ /\/usr\/sbin\/httpd/ { print $2,$6 }' | while read pid rss
do
    if [ $rss -gt 20000 ]
    then
        echo -n "Process $pid has has RSS $rss."
    fi
done

ps aux | awk -- ' $11 ~ /\/usr\/sbin\/httpd/ { print $2,$6 }' | while read pid rss
do
    if [ $rss -gt 20000 ]
    then
        echo -n "Process $pid has has RSS $rss."
    fi
done

Eller eventuelt:

ps aux | awk -- ' $11 ~ /\/usr\/sbin\/httpd/ { print $2,$6 }' | while read pid rss
do
    if [ $rss -gt 20000 ]
    then
        echo -n "At least one of the apache processes has an RSS over allowed maximum. Restarting apache.. "
        /etc/init.d/apache restart
        echo "Done."
        break
    fi
done
Avatar billede maskinen2000 Nybegynder
23. juni 2002 - 21:57 #3
puha det er smart :) Det kigger jeg lige nærmere på imorgen - nu må jeg hellere ud og brænde heksen af :-) Jeg vender tilbage
Avatar billede Soren L. Hansen Nybegynder
24. juni 2002 - 13:15 #4
Ups, jeg ved godt nok ikke lige, hvorfor jeg skrev det ene kodeekspempel to gange. Det skal naturligvis kun køres en gang, men det giver vel sig selv. :-)
Avatar billede maskinen2000 Nybegynder
24. juni 2002 - 20:19 #5
Takker :-)
Avatar billede maskinen2000 Nybegynder
24. juni 2002 - 20:20 #6
Og ja... Det var åbenlyst... med gentagelsen... Jeg kendte ikke til awk, men det gør jeg nu :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester