Quando è necessario risolvere un problema relativo a un servizio di rete, il primo passaggio consiste nell'assicurarsi che il servizio sia in esecuzione.
Se il servizio ha uno script di inizializzazione (init) installato, puoi usare il service
comando per avviare, arrestare e controllare lo stato del servizio. Questo comando fa riferimento a un servizio utilizzando il suo script init, che è memorizzato in /etc/init.d
directory per le distribuzioni basate su Debian® e il etc/rc.d/init.d
directory per le distribuzioni basate su Red Hat®.
Se non si conosce il nome utilizzato dal sistema per un servizio, controllare una delle directory precedenti utilizzando ls
comando seguito dal nome della directory. Alcuni nomi variano a seconda della distribuzione. Ad esempio, Apache® è httpd
su CentOS® e apache2
sul sistema operativo Ubuntu®.
Nota :Molte nuove distribuzioni Linux® utilizzano systemd
invece di netstat
per controllare i servizi. Se stai usando systemd
, sostituisci tuttoservice <service-name> <status>
comandi con systemct1 <status> <service-name>
.Per ulteriori informazioni su systemct1
comandi, vedere Fedora™SysVinit to Systemd Cheatsheet.
Controlla lo stato del servizio
Un servizio può avere uno dei seguenti stati:
start
:Il servizio è stato avviato.stop
:Il servizio ha smesso di funzionare.restart
:il servizio si sta riavviando e si avvierà al termine del processo.
L'esempio seguente mostra come controllare lo stato di httpd
su CentOSby usando il service
comando:
$ sudo service httpd status
httpd is stopped
Avvia il servizio
Se un servizio non è in esecuzione, puoi utilizzare il service
comando per avviarlo. L'esempio seguente avvia httpd
servizio:
$ sudo service httpd start
Starting httpd: [ OK ]
Se l'applicazione non può essere avviata, il sistema segnala l'errore e di solito visualizza un messaggio che indica la causa del problema.
$ sudo service httpd start
Starting httpd: (98)Address already in use: make_sock: could not bind to address [::]:80
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
[FAILED]
Utilizza netstat per trovare i conflitti di porta
Nell'esempio precedente, httpd
non può essere avviato perché qualcosa è già in ascolto sulla porta. Per scoprire cosa sta ascoltando, puoi eseguire netstat
comando.
Esegui il comando seguente per visualizzare un elenco di programmi in ascolto e le porte che stanno utilizzando:
# netstat -plnt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 10.176.77.113:3306 0.0.0.0:* LISTEN 28509/mysqld
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 2113/nc
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1115/master
tcp 0 0 :::22 :::* LISTEN 1051/sshd
L'output mostra che nc
programma (che appare in Program name
colonna) è in ascolto sulla porta 80 (che appare in Local Address
colonna). L'arresto di questo programma dovrebbe abilitare httpd
da avviare.
Nota :Per ulteriori informazioni su netstat
comando, vedi Verifica porte in ascolto con netstat.
Controlla lo stato di xinetd
Se il servizio non è in esecuzione, potrebbe essere dovuto a un super server come un Extended Internet Service Daemon (xinetd
) viene utilizzato per avviare il programma quando viene ricevuta una connessione. In questo caso, l'avvio del servizio potrebbe aver risolto il problema. Esegui il comando seguente per verificare che il problema sia stato risolto:
$ sudo service xinetd status
xinetd (pid 8795) is running...
Controlla i registri
Se non riesci ad avviare il servizio, controlla i tuoi log per vedere se contengono informazioni sul problema.
Passaggi successivi
Dopo esserti assicurato che l'applicazione sia in esecuzione, controlla le risorse del server per verificare quanto sta consumando la tua applicazione.