La maggior parte delle persone esegue il proprio httpd (Apache, Nginx, ecc.) tramite 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 fornisce 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 httpd, uno script o un sistema init diverso, avrai una sintassi leggermente diversa ma, a meno che tu non stia avviando manualmente httpd da solo (che sembra la peggiore idea del mondo), sei probabilmente utilizzando un simpatico script di avvio gestito che ti consentirà di interrogare lo stato.
la risposta di slm ha di più su questo tipo di query init, ma il problema con la fiducia è che ti dice 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 i semplici test di init e passare ai test comportamentali.
Una cosa che sappiamo di httpds è che ascoltano. Di solito sulla porta *:80
, ma se il tuo non lo fa, puoi adattare il codice seguente code. Qui sono solo awk
inviando 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 controllare quale anche il processo è in esecuzione per assicurarsi che sia giusto httpd è in esecuzione. Potremmo fare tutti i tipi di controlli. Dipende da quanto vuoi essere paranoico :)
Ma anche questo è solo un riflesso di un file httpd. Vuoi testarlo davvero? Bene, proviamo 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 ancora una volta, potremmo scavare e testare effettivamente l'output per assicurarci che sia generato correttamente.
Ma anche questo non è così approfondito. Stai controllando localhost
e sta segnalando 200, niente di sbagliato? E se i castori masticassero il cavo di rete che fornisce l'httpd (ma non il resto del sistema)? Allora cosa?! Stai segnalando il tempo di attività quando sei effettivamente inattivo. Poche cose sembrano più poco professionali dei dati sullo stato errati.
Quindi parliamo con un server esterno (idealmente su una connessione completamente diversa, in un'altra galassia molto, molto lontana) e chiediamogli 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 la propria gestione e segnalazione degli errori oppure sono alla fine del client).
Una combinazione di questi test può aiutare a individuare anche dove si trova il problema.
Puoi usare il comando services universalmente sulla maggior parte delle distribuzioni Linux.
$ service <service> status
Esempio
$ service httpd status
httpd (pid 23569) is running...
Questo 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...
...
I vari metodi all'interno di SysVinit, Systemd e Upstart per elencare i servizi
Se stai utilizzando uno dei framework di gestione dei servizi più tipici, puoi 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
Iniziato
$ 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
Riferimenti
- Cheatsheet da SysVinit a Systemd
- Comando per elencare i servizi che si avviano all'avvio?