GNU/Linux >> Znalost Linux >  >> Linux

Jak zjistit, zda httpd běží nebo ne pomocí příkazového řádku?

Většina lidí spouští svůj httpd (Apache, Nginx atd.) prostřednictvím systému init. To je téměř jistě případ, pokud jste instalovali z balíčku. Téměř všechny tyto init systémy mají vyhodnocenou metodu, pokud běží. V mém případě používám nginx, který dodává init skript ve stylu SysV a který přijímá status argument, asi takhle:

$ /etc/init.d/nginx status
 * nginx is running

Je zřejmé, že pokud používáte jiný httpd, skript nebo init systém, budete mít trochu jinou syntaxi, ale pokud sami ručně nespouštíte httpd (což vám připadá jako nejhorší nápad na světě), pravděpodobně pomocí pěkného spravovaného spouštěcího skriptu, který vám umožní dotazovat se na stav.

Odpověď slm má více o tomto druhu init dotazování, ale problém s důvěrou je, že vám skutečně řekne pouze to, zda proces stále běží. Hlavní proces vašeho httpd mohl běžet, ale nějakým způsobem uváznout. Dává velký smysl přeskočit jednoduché init testy a přejít k behaviorálním testům.

Jedna věc, kterou o httpds víme, je, že poslouchají. Obvykle na portu *:80 , ale pokud to vaše ne, můžete upravit kód následující kód. Tady jsem jen awk na výstupu netstat abyste zjistili, zda naslouchá na správném portu.

$ 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

Můžeme také zkontrolovat které proces také běží, abychom se ujistili, že je správný httpd běží. Mohli jsme provádět nejrůznější kontroly. Záleží, jak paranoidní chcete být :)

Ale i to je pouze odrazem httpd. Chcete to opravdu otestovat? Tak pojďme testovat to.

$ wget --spider -S "http://localhost" 2>&1 | awk '/HTTP\// {print $2}'
200

Právě se dívám na kód odpovědi (200 znamená "A-Okay!"), ale znovu bychom se mohli ponořit a skutečně otestovat výstup, abychom se ujistili, že se generuje správně.

Ale ani tohle není tak důkladné. Kontrolujete localhost a hlásí 200, nic špatného? Co když bobři prokousali síťový kabel, který napájí httpd (ale ne zbytek systému)? A pak co?! Hlásíte dobu provozuschopnosti, když jste skutečně mimo provoz. Jen málo věcí vypadá více neprofesionálně než nesprávná data o stavu.

Promluvme si tedy s externím serverem (ideálně na úplně jiném připojení, v jiné galaxii daleko, daleko) a požádejme ho, aby se zeptal na náš server:

$ ssh tank 'wget --spider -S "http://bert" 2>&1' | awk '/HTTP\// {print $2}'
200

V tomto okamžiku jsou všechny hlášené problémy buď problémy v aplikaci (které mohou mít vlastní zpracování a hlášení chyb, nebo jsou na straně klienta).

Kombinace těchto testů může pomoci zjistit, kde je problém také.


Příkaz services můžete použít univerzálně na většině linuxových distribucí.

$ service <service> status

Příklad

$ service httpd status
httpd (pid  23569) is running...

Stejný příkaz lze použít pro všechny služby, které běží samostatně, nebo pro zjištění stavu všech služeb.

$ service --status-all
python is stopped
automount (pid 22457) is running...
Avahi daemon is not running
Avahi DNS daemon is not running
crond (pid  23577) is running...
gpm is stopped
hald is stopped
httpd (pid  23569) is running...
...

Různé metody v rámci SysVinit, Systemd a Upstart pro výpis služeb

Pokud používáte jeden z typičtějších rámců správy služeb, můžete použít následující metody k vypsání služeb v každém z nich.

SysVinit

$  ls -l /etc/init.d/ | head -10
total 220
-rwxr-xr-x 1 root root  1422 Jan 13  2009 ajaxterm
-rwxr-xr-x 1 root root  3052 Apr 20  2012 autofs
-rwxr-xr-x 1 root root  1877 Apr 13  2011 avahi-daemon
-rwxr-xr-x 1 root root  1824 Apr 13  2011 avahi-dnsconfd
-rwxr-xr-x 1 root root  1926 Feb 22  2012 crond
-rwxr-xr-x 1 root root 14291 Dec 19  2011 functions
-rwxr-xr-x 1 root root  1778 Jan  6  2007 gpm
-rwxr-xr-x 1 root root  1586 Mar  5  2011 haldaemon
-rwxr-xr-x 1 root root  5742 Dec 19  2011 halt

Systemd

$ systemctl list-unit-files --type=service | head -10
UNIT FILE                                   STATE   
abrt-ccpp.service                           enabled 
abrt-oops.service                           enabled 
abrt-pstoreoops.service                     disabled
abrt-vmcore.service                         enabled 
abrt-xorg.service                           enabled 
abrtd.service                               enabled 
accounts-daemon.service                     enabled 
alsa-restore.service                        static  
alsa-state.service                          static  

Počáteční

$ initctl list | head -10
avahi-daemon start/running, process 1090
mountall-net stop/waiting
nmbd start/running, process 2045
passwd stop/waiting
rc stop/waiting
rsyslog start/running, process 1088
tty4 start/running, process 1211
udev start/running, process 483
upstart-udev-bridge start/running, process 480
ureadahead-other stop/waiting

Odkazy

  • SysVinit to Systemd Cheatsheet
  • Příkaz k zobrazení seznamu služeb, které se spouštějí při spuštění?

Linux
  1. Jak zabít příkazový řádek Chromium přes Ssh?

  2. find:příkaz nenalezen

  3. Jak zjistit verzi Bluez z příkazového řádku?

  1. Jakou verzi Linuxu používám? Zde je návod, jak to zjistit

  2. Jak zjistit, co dělá příkaz Linuxu

  3. Linux – Jak zjistit rodinu architektury Intel z příkazového řádku?

  1. Jak změnit oprávnění a vlastníky pomocí příkazového řádku

  2. Spuštění softwarového centra z příkazového řádku jako root?

  3. Jak zjistím, jakou verzi Linuxu používám?