środa, 24 czerwca 2009

Monitorowanie stanu serwera FTP

Kilka dni temu pojawił mi się problem z niedostępnością serwera FTP. Korzystam z stosunkowo mało popularnego TwoFTPd pod Linuxa. Proces otrzymywał bardzo dziwny PID i niemożliwe stawało się zalogowanie do serwera. W chwili występowania błędu nie były wysyłane żadne komunikaty. Aktualizacja i update do najnowszej wersji nie przyniosły rezultatu, a problem pojawiał się w losowych momentach. Tak oto narodził się pomysł sprawdzania stanu FTP przy pomocy skrytpu w cronie.

W skrypcie wykorzystałem grepa to analizy odpowiedzi z serwera. Nie będę zamieszczał całego skryptu, ponieważ dzieje się w nim jeszcze kilka innych rzeczy ;) Generalnie zasada polega na pobraniu odpowiedzi z serwera:

ftp -n -v 192.168.0.2 < /home/ducker/FTP_TEST/ftp_cmd.cmd > /home/ducker/FTP_TEST/log_ftp.log

Plik "ftp_cmd.cmd" zawiera zestaw komend, które mają być wysłane do naszego serwera. W moim przypadku jest to "quit". Nie potrzebuję nic robić na serwerze, jedynie odebrać jego nagłówek. Odpowiedź serwera trafia do pliku "log_ftp.log".

STATUS=`grep ready /home/ducker/FTP_TEST/log_ftp.log`

Do zmiennej STATUS wyciągamy przy pomocy grepa linijkę z odpowiedzią serwera zawierającą zwrot "ready".

if [ STATUS=="220-TwoFTPd server ready." ]
then
echo "---------------------------------" >> /home/ducker/FTP_TEST/log_run.log
date >> /home/ducker/FTP_TEST/log_run.log
echo ">>> ONLINE" >> /home/ducker/FTP_TEST/log_run.log
echo "---------------------------------" >> /home/ducker/FTP_TEST/log_run.log
else
echo "---------------------------------" >> /home/ducker/FTP_TEST/log_run.log
date >> /home/ducker/FTP_TEST/log_run.log
echo ">>> OFFLINE" >> /home/ducker/FTP_TEST/log_run.log
sv restart twoftpd >> /home/ducker/FTP_TEST/log_run.log
echo "---------------------------------" >> /home/ducker/FTP_TEST/log_run.log
fi


Następnie sprawdzamy zawartość zmiennej STATUS. Jeśli jest ona identyczna ze wzorcem to pozostawiamy serwer w spokoju, w przeciwnym wypadku restartujemy jego usługę. Informacje zapisywane są w pliku "log_run.log". Plik ten przy pomocy sendmail'a wysyłam sobie na koniec dnia. Aby skrypt nabrał funkcjonalności musimy go umieścić w cronie i wywołać z pożądanym interwałem czasowym. W moim przypadku ustawiłem sprawdzanie co 30 minut.

Brak komentarzy: