Om du har varit administratör under en längre tid har du verkligen upptäckt situationer där en server spikar i CPU-användning eller minnesanvändning och / eller belastningsnivåer. Att springa 'topp' kommer inte alltid att ge dig svaret heller. Så hur hittar du de lömska processerna som tuggar upp dina systemresurser för att kunna döda dem?
Följande skript kan vara till hjälp. Den skrevs för en webbserver, så har vissa delar av den som specifikt letar efter httpd-processer och vissa delar som behandlar MySQL. Beroende på din serverdistribution, kommentera / ta bort dessa avsnitt och lägg till andra. Den ska användas som utgångspunkt.
Förutsättningar för den här versionen av skriptet är gratisprogram som släppts under GNU General Public License med namnet mytop (tillgänglig på
http://jeremy.zawodny.com/mysql/mytop/
) vilket är ett fantastiskt verktyg för att kontrollera hur MySQL fungerar. Det blir gammalt, men fungerar fortfarande bra för våra ändamål här.
Dessutom använder jag mutt som utskick - du kanske vill ändra skriptet för att helt enkelt använda det inbyggda linux-verktyget `mail`. Jag kör den via cron varje timme; justera efter behov. Åh - och detta skript måste köras som root eftersom det läser från vissa skyddade områden på servern.
Så låt oss komma igång, eller hur?
Ställ först in dina skriptvariabler:
#! / Bin / Bash
#
# Skript för att kontrollera genomsnittliga nivåer för systembelastning för att försöka bestämma
# vilka processer tar det alltför högt ...
#
# 07Jul2010 tjones
#
# ställa in miljö
dt = `datum +% d% b% Y-% X`
# Ändra självklart följande kataloger där dina loggfiler faktiskt finns
tmpfile = "/ tmp / checkSystemLoad.tmp"
logfile = "/ tmp / checkSystemLoad.log"
msgLog="/var/log/messages"
mysqlLog="/var/log/mysqld.log"
# första poststopp är standard e-post för rapporter. Den andra är för mobiltelefon (med en avrapporterad rapport)
mailstop = "[email protected]"
mailstop1 = "[email protected]"
maskin = `värdnamn`
# Följande tre är för mytop-användning - använd en db-användare som har anständiga rättigheter
dbusr = "användarnamn"
dbpw = "lösenord"
db = "ditt databasnamn"
# Följande är lastnivån att kontrollera - 10 är riktigt hög, så du kanske vill sänka den.
levelToCheck = 10
Kontrollera sedan din belastningsnivå för att se om skriptet ska fortsätta:
# Ställ in variabler från systemet:
loadLevel = `cat / proc / loadavg | awk '{print $1}' '
loadLevel = $ (printf "% 0.f" $ loadLevel)# om belastningsnivån är högre än du vill, starta skriptprocessen. I annat fall avslutar du 0
om [ $loadLevel -gt $levelToCheck ]; sedan
echo ""> $ tmpfile
eko "**************************************" >> $ tmpfile
eko "Datum: $ dt" >> $ tmpfile
eko "Kontrollera systembelastning och processer" >> $ tmpfile
eko "**************************************" >> $ tmpfile