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í?