Pracuję nad małym panelem sterowania dla mojego serwera. Potrzebuję polecenia, które powie, czy httpd
jest uruchomione, czy zatrzymane.
Prawdopodobnie użyje tego samego kodu również do innych usług.
Większość osób korzysta z httpd (Apache, Nginx itp.) Za pośrednictwem systemu init. Tak jest prawie na pewno w przypadku instalacji z pakietu. Prawie wszystkie z tych systemów inicjujących mają metodę sprawdzającą się, jeśli jest uruchomiona. W moim przypadku używam nginx, który dostarcza skrypt inicjujący w stylu SysV i który przyjmuje status
argument, tak jak poniżej:
$ /etc/init.d/nginx status
* nginx is running
Oczywiście, jeśli używasz innego systemu httpd, skryptu lub systemu init, będziesz miał nieco inną składnię, ale chyba że samodzielnie uruchomisz httpd (co wydaje się najgorszym pomysłem na świecie), prawdopodobnie używając ładnego, zarządzanego skryptu startowego, który pozwoli ci zapytać o status.
Odpowiedź slm zawiera więcej informacji na temat tego rodzaju zapytań inicjujących, ale problem polegający na zaufaniu polega na tym, że naprawdę mówi tylko, czy proces nadal działa. Główny proces twojego httpd może być uruchomiony, ale w jakiś sposób zablokowany. Sensowne jest pominięcie prostych testów inicjacyjnych i przejście do testów behawioralnych.
Jedno wiemy o httpds, że słuchają. Zwykle na porcie *:80
, ale jeśli nie, możesz dostosować kod za kodem. Właśnie sprawdzam, czy awk
dane wyjściowe netstat
nasłuchują na odpowiednim porcie.
$ sudo netstat -ntlp | awk '$4=="0.0.0.0:80"'
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 2079/nginx
Możemy również sprawdzić, który proces jest uruchomiony, aby upewnić się, że działa właściwy httpd. Moglibyśmy przeprowadzać różnego rodzaju kontrole. Zależy, jak paranoik chcesz być :)
Ale nawet to jest tylko odzwierciedleniem httpd. Chcesz to naprawdę przetestować? Dobrze niech przetestować go.
$ wget --spider -S "http://localhost" 2>&1 | awk '/HTTP\// {print $2}'
200
Patrzę tylko na kod odpowiedzi (200 oznacza „A-OK!”), Ale znowu możemy się zalogować i przetestować dane wyjściowe, aby upewnić się, że są poprawnie generowane.
Ale nawet to nie jest takie dokładne. Sprawdzasz localhost
i zgłasza 200, nic złego? Co się stanie, jeśli bobry przeżują kabel sieciowy zasilający httpd (ale nie resztę systemu)? Więc co ?! Zgłaszasz dyspozycyjność, kiedy faktycznie nie żyjesz. Niewiele rzeczy wygląda bardziej nieprofesjonalnie niż nieprawidłowe dane o stanie.
Porozmawiajmy więc z zewnętrznym serwerem (najlepiej przy zupełnie innym połączeniu, w innej galaktyce daleko, daleko) i poproś go o wysłanie zapytania do naszego serwera:
$ ssh tank 'wget --spider -S "http://bert" 2>&1' | awk '/HTTP\// {print $2}'
200
W tym momencie wszelkie zgłoszone problemy są albo problemami w aplikacji (które mogą mieć własne metody obsługi błędów i raportowania, albo są po stronie klienta).
Kombinacja tych testów może pomóc ustalić, gdzie jest problem.
Możesz używać polecenia services uniwersalnie w większości dystrybucji Linuksa.
Przykład
Tego samego polecenia można użyć dla wszystkich usług, które są uruchomione indywidualnie lub w celu znalezienia statusu wszystkich usług.
Różne metody SysVinit, Systemd i Upstart dla usług listowania
Jeśli korzystasz z jednej z bardziej typowych ram zarządzania usługami, możesz użyć następujących metod, aby wyświetlić listę usług w ramach każdej z nich.
SysVinit
Systemd
Dorobkiewicz
Referencje
źródło