GNU/Linux >> Linux Esercitazione >  >> Linux

Come scoprire se httpd è in esecuzione o meno tramite la riga di comando?

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?

Linux
  1. Come modificare autorizzazioni e proprietari tramite riga di comando

  2. Quale versione di Linux sto eseguendo? Ecco come scoprirlo

  3. Come scoprire cosa fa un comando Linux

  4. Linux:come scoprire la famiglia di architettura Intel dalla riga di comando?

  5. Esecuzione di Software-center dalla riga di comando come root?

Come scoprire l'indirizzo IP pubblico dalla riga di comando su Linux

Come scoprire da quanto tempo è in esecuzione un processo in Linux

Come trovare informazioni sulla CPU in Linux utilizzando la riga di comando

Come trovare l'indirizzo IP nella riga di comando di Linux

Procedura:Linux Generale – IPTable di base tramite riga di comando

Come scoprire le directory o i file che consumano più spazio?