sobota, 22 grudnia 2012

Zbieranie informacji z systemu - Skrypt Bash cz.1

Często zdarza się, że musimy na szybko wyciągnąć kilka informacji z systemu możemy użyć prostego skryptu, np. Webmin lub też phpSysinfo. Możemy również sami coś skonstruować na szybko, gdybyśmy przypadkiem nie zapłacili na internet i nie mięli do niego dostępu:).


1) Monitorowanie dysku twardego:

W systemie GNU/Linux możemy przy pomocy polecenie df -h wyświetlić całą strukturę dysku:


Ok, chcemy jednak stworzyć skrypcik, który po wrzuceniu do crona będzie sprawdzał czy na partycji sda1 lub innej dowolnej nie kończy się nam miejsce.
Dlatego też musimy nieco dodać do naszego polecenia. Wykorzystamy grep'a , awk oraz cut.
Pierwsze wyszukuje zadane wyrażenie (u nas sda1), drugie wycina procent wykorzystania dysku.

Rozbudowujemy nasze polecenie o :

df -h | grep sda1 | awk '{print $5}'

Na wyjściu powinniśmy otrzymać, np. 12%. Print $5 wybiera 5 kolumnę w naszej tabelki.
Mamy już informację o procencie w jakim zajęta jest partycja. Musimy teraz ustawić sobie wartości graniczne po przekroczeniu których dostaniemy ostrzeżenia. Pobraliśmy 12%, musimy ten % wyciąć. Do tego celu wykorzystamy cut -b 1-2 . 1-2 zawęża bity informacji, czyli max będzie można pokazać 99. Ostatecznie po wykonaniu poniższego polecenia otrzymamy 12.

df -h | grep sda1 | awk '{print $5}' | cut -b 1-2

Dodamy kilka rzeczy, aby sprawdzać zajętość miejsca w sposób ciągły:


#!/bin/bash
HDDStat=`df -h | grep sda1 | awk '{print $5}' | cut -b 1-2`
if [ "$HDDStat" = "100" ]; then                      echo "Brak miejsca na partycji!!!"  > /root/info.txt elif [ "$HDDStat" -gt "90" ]; then                      echo "Zajetosc partycji ponad 90%." > /root/info.txt else                      echo "Partycja zajeta na poziomie $HDDStat%." >/root/info.txt
cat /root/info.txt | mail -s "Info z dysku" admin@gmail.com fi

Komunikaty przechwytujmy do pliku, następnie będzie on wysłany na maila. > będzie nadpisywał plik info.txt, dzięki czemu otrzymamy tylko ostatnie dane. Ewentualnie możemy dopisać do pliku archiwum, aby mieć informacje o postępie zapełnienia dysku, wraz z godziną o tak:



#!/bin/bash
HDDStat=`df -h | grep sda1 | awk '{print $5}' | cut -b 1-2`Timestat=`date | awk '{print $1,$2,$3,$4,$6 }'`

if [ "$HDDStat" = "100" ]; then                      echo "$Timestat - Brak miejsca na partycji!!!."  > /root/info.txt
elif [ "$HDDStat" -gt "90" ]; then                      echo "$Timestat - Zajetosc partycji ponad 90%."  > /root/info.txt
else                      echo "$Timestat - Partycja zajeta na poziomie $HDDStat%." > /root/info.txt
cat /root/info.txt | mail -s "Info z dysku" admin@gmail.com
fi


Dodałem pobranie obecnej daty, w której wyświetli się dzień, miesiąc, nr. dnia, godzina oraz rok.

Możemy dodać skrypt do crona, aby o konkretnej godzinie skrypt się wywoływał.






2) Wyciągnijmy kilka rzeczy związanych z procesorem, pamięcią oraz działaniem serwera:


Informacje dotyczące procesora oraz pamięci RAM, przechowywane się odpowiednio w /proc/cpuinfo oraz /proc/meminfo.

Poniżej skrypt, który na szybko pokaże nam podstawowe informacje o pamięci ram oraz modelu, mocy oraz pamięci procesora.


#!/bin/bashMemTotal=`cat /proc/meminfo | head -1 | awk '{print $2 }'`MemFree=`cat /proc/meminfo | grep MemFree | awk '{print $2}'`MemBuff=`cat /proc/meminfo | grep Buffers | awk '{print $2}'`MemCach=`cat /proc/meminfo | head -4 |grep Cached | awk '{print $2}'`Proc=`cat /proc/cpuinfo | grep CPU | awk '{print $4,$5,$6,$7,$8,$9}'`ProcCach=`cat /proc/cpuinfo | grep cache | grep size | awk '{print $4}'`echo "W systemie zainstalowano: "$((MemTotal/1024)) "MB";echo "Pozostalo: "$((MemFree/1024)) "MB";echo "System buforuje: "$((MemBuff/1024)) "MB";echo "Cache systemu: "$((MemCach/1024)) "MB";echo "Zamontowano: "$Proc;echo "Cache procesora: "$((ProcCach/1024)) "MB";

Skrypt łączy  w sobie kilka poleceń, cat wycina część danych z pliku meminfo/cpuinfo. Head -1 pokazuje pierwszą linijkę z pliku meminfo. AWK wycina kolumny z naszych plików, grep natomiast wyszukuje konkretnych słów kluczowych, za pomocą których można pobrać konkretną linijkę. W przypadku procesora możemy jednocześnie pobrać kilka rzeczy oddzielając je przecinkiem (Proc).
W echo mamy zapis $((MemFree/1024)) w ten sposób zamieniam Kb na MB, przez co zapis jest bardziej czytelny.

Możemy dodatkowo dodać informację o czasie działania serwera oraz liczbie zalogowanych użytkowników:

Uptime=`uptime | awk '{print $3,$4}'`WhoLogIn=`uptime | awk '{print $5}'`
echo "Serwer dziala: " $Uptime "zalogowanych jest: " $WhoLogIn "uzytkownikow";



Brak komentarzy:

Prześlij komentarz