Wiele razy zdarzało mi się, że mój serwer padł całkowicie lub przerywał żądania. Wówczas był niedostępny, a zarobki generowane z serwisów diametralnie spadały. Co więcej… użytkownicy poczuli niestabilność maszyny. Dziś po odpowiedniej optymalizacji kodów aplikacji pady są rzadkością, ale wolę się ubezpieczyć przed niespodziewanym downem serwera.
Problem można rozwiązać w prosty sposób: cyklicznie uruchamiany program bash‘a przez crona będzie odpowiadał za poprawne działanie usługi apache. Listing, który zaprezentuję łączy się z adresem url odwołującym się do naszego serwera za pomocą wget, a następnie wynik działania (response body) zapisze do pliku tymczasowego. Jeżeli plik istnieje oraz ma rozmiar niezerowy, oznacza to, że serwer działa poprawnie. Jeżeli plik nie istnieje, bądź jego wielkość jest równa zero z, oznacza to, że trzeba zrestartować usługę apache, bo nie odpowiada. Zaraz przed zakończeniem programu, plik tymczasowy powinien zostać usunięty. Pozwoliłem sobie opublikować mały program służący do automatycznego restartu usługi apache.
Aby nasz program poprawnie działał, trzeba zastanowić się nad trzema istotnymi rzeczami:
wget oraz jakie mogę być timeouty.Na moim serwerze program uruchamia się co minutę, próbuje połączyć się ze stroną dwa razy, a maksymalny czas oczekiwania na odpowiedź przy każdej z prób wynosi 10 sekund.
Program zapisany jest pod /root/check_apache.sh, a regułka uruchamiania w cronie wygląda następująco:
* * * * * bash /root/check_apache.sh
Przedstawiony problem można rozwiązać na wiele sposobów, przedstawiłem ten najbardziej oczywisty.
Twoje wstępy są trochę idiotyczne, moim zdaniem ;) Ale przejdźmy do rzeczy.
Dlaczego do sprawdzania działania usługi pingujesz serwer? Od sprawdzania działania usługi są service monitory. Nawet taka komenda “ps”.
Twój sposób nie jest najbardziej oczywisty. Dodatkowo nie wiem czemu sprawdzasz co minutę. Jeśli uważasz, że przez 5-10 minut Twoje “zarobki” spadną ”diametralnie”, to musisz kosić zapewne grube kokosy miesięcznie. Merola już masz?
Generalnie osobiście polecałbym http://rfxnetworks.com/sim.php – to jest oczywiste rozwiązanie. Generalnie z tego samego chyba korzystają na hostingach dzielonych (nie virtuale).
“ps” pokaże mi 20 procesów apache’a, gdy ten się zawiesi, procesy nadal są, a serwer nie odpowiada.
W trakcie, gdy serwer zaczął padać, straciłem 40% stałych użytkowników, co przełożyło się na proporcjonalnie kliki w reklamy. Tak, straciłem miesięczny melonik, czyli dwukrotne miesięczne opłacenie serwera ;)
Na to też jest sposób. Wystarczy poszukać. Ale jak już powiedziałem, SIM jest idealnym do tego narzędziem – jeśli masz virtuala bądź dedyka. Jeśli masz shared hosting to w 90% przypadkow jest to build-in w panel zarządzania hostingiem.
hmm… po pierwsze na Twoim miejscu zacząłbym się najpierw zastanawiać co powoduje tak częste wywalanie apache’a bo to nie jest normalne. Problem będzie pewnie tkwił w samym apache’u co kwalifikuje go do aktualizacji lub zmiany konfiguracji; lub np w skryptach Twoich stron (za to to już jest odpowiedzialny programista).
Utworzenie skryptu, który co minute czy pięć będzie Ci sprawdzał czy apache żyje i ew. restartowanie serwera jest tylko nałożeniem plastra na krwawiącą ranę i nie jest rozwiązaniem problemu. Pomyśl sobie że dojdzie do takiej sytuacji że serwer będzie się restartował faktycznie co minute. Ty będziesz zadowolony bo jak sprawdzisz to będzie ok ale przy dużej liczbie odwiedzających Twoją stronę i tak będą oni co jakiś czas zauważali że niektóre podstrony się nie załadują.
pozdrawiam
Jeżeli chodzi o optymalizację skryptów – wszystko jest w porządku, jak wspomniałem w poście. Zawieszanie się serwera to (u mnie, prowadzę logi) średnio raz na 2 tygodnie. To i tak nie wyklucza faktu, że możnaby się głębiej przyjrzeć, co powoduje ewentualny crash.
Dziwny sposób ze sprawdzaniem wget…
Bardzo dużo zależności przez to wprowadzasz, chociażby DNSy muszą być sprawne i pracochłonne dla maszyny się to wydaje.
bez sensu. Zmniejsz keep alive timeout do 2 sekund i zwiększ limit procesów do 100 na dzień dobry.
Zamiast pełnego adresu: http://www.lookme.pl/Ping użyj IP (zakładając że masz tam roota, a skoro możesz restartować apacha, to “raczej” masz), lepiej użyć IP (odpadam żądanie do DNS, i ew problem DNS, który nie będzie problemem HTTPD)