Risposte:
Molte persone eseguono il loro httpd (Apache, Nginx, ecc.) Attraverso un sistema init. Questo è quasi certamente il caso se hai installato da un pacchetto. Quasi tutti questi sistemi init hanno un metodo che funziona se è in esecuzione. Nel mio caso sto usando nginx che distribuisce uno script init in stile SysV e che accetta un status
argomento, in questo modo:
$ /etc/init.d/nginx status
* nginx is running
Ovviamente se stai eseguendo un diverso sistema httpd, script o init, avrai una sintassi leggermente diversa ma a meno che tu non stia lanciando manualmente l'httpd (che sembra l'idea peggiore del mondo), sei probabilmente usando uno script di avvio gestito, che ti permetterà di interrogare lo stato.
La risposta di slm ha di più su questo tipo di interrogazione init, ma il problema con la fiducia è che ti dice davvero solo se un processo è ancora in esecuzione. Il processo principale del tuo httpd potrebbe essere in esecuzione ma in qualche modo bloccato. Ha molto senso saltare semplici test di inizializzazione e passare a test comportamentali.
Una cosa che sappiamo di httpd è che ascoltano. Di solito sulla porta *:80
, ma se il tuo non lo fa, puoi adattare il seguente codice. Qui sto solo awk
eseguendo l'output di netstat
per vedere se è in ascolto sulla porta giusta.
$ 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
Potremmo anche verificare quale processo è in esecuzione anche per assicurarci che sia giusto httpd sia in esecuzione. Potremmo fare tutti i tipi di controlli. Dipende da quanto paranoico vuoi essere :)
Ma anche questo è solo un riflesso di un httpd. Vuoi davvero testarlo? Beh diciamo prova esso.
$ wget --spider -S "http://localhost" 2>&1 | awk '/HTTP\// {print $2}'
200
Sto solo guardando il codice di risposta (200 significa "A-Okay!") Ma, di nuovo, potremmo scavare e testare effettivamente l'output per assicurarci che venga generato correttamente.
Ma anche questo non è così accurato. Stai controllandolocalhost
e sta segnalando 200, niente di male? Cosa succede se i castori masticano attraverso il cavo di rete che fornisce l'httpd (ma non il resto del sistema)? E allora ?! Stai segnalando il tempo di attività quando sei effettivamente inattivo. Poche cose sembrano più non professionali dei dati di stato errati.
Quindi parliamo con un server esterno (idealmente su una connessione completamente diversa, in un'altra galassia molto, molto lontana) e chiediamo di interrogare il nostro server:
$ ssh tank 'wget --spider -S "http://bert" 2>&1' | awk '/HTTP\// {print $2}'
200
A questo punto, tutti i problemi segnalati sono problemi in-app (che possono avere il proprio errore nella gestione e nella segnalazione, oppure sono alla fine del cliente).
Una combinazione di questi test può aiutare a chiarire dove si trova anche il problema.
È possibile utilizzare il comando services universalmente sulla maggior parte delle distribuzioni Linux.
$ service <service> status
$ service httpd status
httpd (pid 23569) is running...
Lo stesso comando può essere utilizzato per tutti i servizi in esecuzione su base individuale o per trovare lo stato di tutti i servizi.
$ 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...
...
Se si utilizza uno dei più tipici framework di gestione dei servizi, è possibile utilizzare i seguenti metodi per elencare i servizi all'interno di ciascuno.
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
parvenu
$ 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