www.mamboteam.com
aptitude : me and my debian - a work in progress  
Startsida arrow Forum
2008-09-05
 
 
Huvudmeny
Startsida
debian
bash
Forum
Användarmeny
tidigare material
nyheter
grafik
BadVista
BASH Forum
Välkommen, Gäst
Vänligen Logga in eller Registrera.
Glömt ditt lösenord?
Övervaka CPU-användning (1 läser)
Ned Svara på det här inlägget Favoriserade: 0
ÄMNE: Övervaka CPU-användning
#35
marwal (Moderator)
Moderator
Inlägg: 27
graphgraph
Användare Offline Klicka här för att se användarens profil
Övervaka CPU-användning 2007-07-20 22:43 Karma: 0  
Scriptet övervakar användningen av CPU och utför användardefinierade åtgärder om en applikation överskrider förinställd gräns för CPU-användning under längre tid än tillåtet.

Code:

 #!/bin/bash # #   CPU_MONITOR Version 0.1 #   av M Wallin 2007-07-20 # #   CPU_MONITOR övervakar processer och anslutningar #   Om en process använder för mycket CPU under angiven #   tid körs ett kommando (skicka mail, döda processen #   eller liknande) # #   =-> INSTÄLLNINGAR <-= # # MAX CPU per "applikation" (procent 1-100) max_cpu=20 # Den tid en applikation tillåts ligga över högsta #   tillåtna CPU (sekunder). accept_sec=30 # Kommando att utföra om en applikation använder för #  mycket CPU under för lång tid. %PID%=process_ID för #  applikationen, %PNAME%=applikationens namn. #cpu_action="kill -9 %PID%" #cpu_action="renice +5 %PID%" cpu_action="echo 'Application %PNAME% with  processID %PID% has \ been using moore than $max_cpu % CPU for over $accept_sec seconds.' | \ mail -s 'varning' marwal" #   =-> /INSTÄLLNINGAR <-= function fetch_cpu() {     PS_LIST=$(ps -eo pcpu,pid -o comm= | sort -k1 --\     awk '{if ($1 > '$max_cpu'){print $1"_"$2"_"$3}}')     if [ $-eq 1 ]; then     PSL1=$PS_LIST     else     PSL2=$PS_LIST     fi     for UPP in $PS_LIST; do         UPP=$(echo $UPP tr '_' ' ')         UPP=($UPP)         USAGE=${UPP[0]}         USAGE_INT=$(printf "%.f" $USAGE)         PID=${UPP[1]}         PNAME=${UPP[2]}         SEK=$(date +%s)              #echo -e "$USAGE_INT\t$PID\t$PNAME"     done } function find_matches() {     for PS2 in $PSL2; do         PS2=$(echo $PS2 tr '_' ' ')         PS2=($PS2)     PID2=${PS2[2]}     for PS1 in $PSL1; do         PS1=$(echo $PS1 tr '_' ' ')         PS1=($PS1)         PID1=${PS1[2]}         # applikationer som överskrider CPU TID         if [ $PID2 == $PID1 ]; then         USAGE=${PS1[0]}         USAGE_INT=$(printf "%.f" $USAGE)         PID=${PS1[1]}         PNAME=${PS1[2]}         cpu_action=$(echo $cpu_action \             sed 's/%PNAME%/'$PNAME'/' \             sed 's/%PID%/'$PID'/')         # lista applikationer         echo -"$USAGE_INT\t$PID\t$PNAME"         # utför kommando         eval $cpu_action         fi             done     done } clear fetch_cpu 1 sleep $accept_sec fetch_cpu 2 find_matches sleep $accept_sec while true; do     clear     PSL1=$PSL2     fetch_cpu 2     find_matches     sleep $accept_sec done



Inlägg ändrat av marwal, den 2007-07-20 23:13
  Logga in för att svara.
Upp Svara på det här inlägget
Powered by FireBoard
 
Top! Top!