Come verificare se un particolare servizio è in esecuzione su Ubuntu


253

Non conosco il nome del servizio, ma vorrei interrompere il servizio verificandone lo stato.

Ad esempio, se voglio verificare se il servizio PostgreSQL è in esecuzione o meno, ma non conosco il nome del servizio, come posso verificarne lo stato?

Conosco il comando per verificare lo stato se il nome del servizio è noto.


1
Quindi come fai a sapere se è il servizio corretto se non sai come si chiama? Posso aggiungere molti script di init a /etc/init.d/ con nomi contenenti parole chiave postgres (anche se questo sarebbe insensato!) E come fai a sapere che è il servizio che vorresti interrompere? Per favore aggiungi qualche spiegazione per il tuo contesto
Stefan,

1
@Stefan visto che sono nuovo ai comandi di Linux vorrei sapere se non conosco il nome corretto del servizio, ma in parte usando parte del nome del servizio o come il nome posso trovare lo stesso
abcd

1
È possibile utilizzare gli elenchi di servizi o ps -ef e analizzare gli output. In ogni caso non credo che questa sia una buona idea servizi che ti impedisce pensate sono quelli di smettere, ma non sicuro . Pertanto, è necessario creare un elenco con i nomi dei servizi reali in esecuzione sul computer che si desidera interrompere. Se consideri di interrompere solo i servizi "standard" come Postgres, MySQL, http, puoi scoprire i nomi dei servizi in modo molto semplice.
Stefan,

Controlla il gruppo askubuntu: askubuntu.com/questions/407075/…
svassr

Risposte:


438

Non ho una scatola Ubuntu, ma su Red Hat Linux puoi vedere tutti i servizi in esecuzione eseguendo il seguente comando:

service --status-all

Nell'elenco +indica che il servizio è in esecuzione, -indica che il servizio non è in esecuzione, ?indica che lo stato del servizio non può essere determinato.


3
Grazie. La documentazione non dice cosa significano i simboli accanto a ciascun servizio. Immagino che "+" significa che è in esecuzione e "-" significa che non è ... quindi c'è il "?" accanto a molti. + significa correre?
Oscar,

89
"+" iniziato "-" fermato "?" fonte
gkiko

Come farei questo su Redhat (centos)
PolarisUser,

14
Hai idea del perché un servizio è contrassegnato con [-] {name}ma viene sudo service {name} statusmostrato come in esecuzione?
Mark Murphy,

6
Potresti anche voler eseguire sudo initctl list, come menzionato da @linuxnewbee qui dopo.
svassr,

79

Per Ubuntu (verificato con 12.04)

Puoi ottenere un elenco di tutti i servizi e selezionarne uno per colore con 'grep':

sudo service --status-all | grep postgres

Oppure puoi usare un altro modo se conosci il nome corretto del servizio:

sudo service postgresql status

4
Non vedo che il grep abbia alcun effetto (anche usando Ubuntu 12.04).
notapatch

2
Il modo corretto di grep è:sudo service --status-all 2>&1 | grep postgres
Adam Chwedyk,

sudo service x statusriporta Active: inactive (dead)qui per un servizio in esecuzione, Ubuntu 15.04 (Vivid)
Dinei

39

Forse quello che vuoi è il comando ps;

ps -ef

ti mostrerà tutti i processi in esecuzione. Quindi se hai un'idea di ciò che stai cercando, usa grep per filtrare;

ps -ef | grep postgres

2
A volte il nome del processo non è uguale al nome del servizio.
Francisco Quintero,

Probabilmente è meglio pgrep -a postgres. Questo evita anche quelli fastidiosi grep --color=auto needle.
Pablo A


16

C'è un modo semplice per verificare se un servizio è in esecuzione

systemctl status service_name

Prova PostgreSQL:

systemctl status postgresql

6

È possibile utilizzare il comando seguente per controllare l'elenco di tutti i servizi.

ps aux 

Per verificare il tuo servizio:

ps aux | grep postgres

Questo è identico alla risposta sopra
Pablo A

2

il modo migliore è usare lo nmapstrumento nel terminale. nmap è uno strumento utile che analizza un sistema attivo, utilizzandolo IP Address, quindi mostra tutta la rete attivata services.

apri terminale usa questo esempio:

~$ nmap 192.168.1.3/24

Starting Nmap 5.21 ( http://nmap.org ) at 2016-05-16 22:49 IRDT
Nmap scan report for 192.168.1.3
Host is up (0.00020s latency).
Not shown: 994 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
23/tcp   open  telnet
139/tcp  open  netbios-ssn
445/tcp  open  microsoft-ds
3389/tcp open  ms-term-serv
3689/tcp open  rendezvous

1
Funziona solo se si tratta di un servizio di rete, ovviamente.
Molomby,

2

correre

ps -ef | grep name-related-to-process

sopra comando fornirà tutti i dettagli come pid, ora di inizio del processo.

come se si desidera che tutto il processo java real dare java o se si dispone del nome del processo, inserire il nome


Funziona fino a quando il nome del servizio è composto da 8 caratteri o meno. In caso contrario, l'elenco viene troncato.
Tomas Kubes,

0

Modo sporco per trovare servizi in esecuzione. (a volte non è preciso perché alcuni script personalizzati non hanno l'opzione | status |)

[root@server ~]# for qw in `ls /etc/init.d/*`; do  $qw status | grep -i running; done
auditd (pid  1089) is running...
crond (pid  1296) is running...
fail2ban-server (pid  1309) is running...
httpd (pid  7895) is running...
messagebus (pid  1145) is running...
mysqld (pid  1994) is running...
master (pid  1272) is running...
radiusd (pid  1712) is running...
redis-server (pid  1133) is running...
rsyslogd (pid  1109) is running...
openssh-daemon (pid  7040) is running...

0

Per centos, sotto il comando ha funzionato per me (:

locate postgres | grep service

Produzione:

/usr/lib/firewalld/services/postgresql.xml

/ usr / lib / systemd / system / postgresql-9.3.service

sudo systemctl status postgresql-9.3.service

0

Per verificare lo stato di un servizio sul sistema operativo linux:

//in case of super user(admin) requires    
sudo service {service_name} status 
// in case of normal user
service {service_name} status 

Per interrompere o avviare il servizio

// in case of admin requires
sudo service {service_name} start/stop
// in case of normal user
service {service_name} start/stop 

Per ottenere l'elenco di tutti i servizi insieme a PID:

sudo service --status-all

Puoi usare systemctl invece di chiamare direttamente il servizio:

systemctl status/start/stop {service_name}

0

per Centos 6.10: /sbin/service serviceNAME status

per Centos 7.6 e Ubuntu 18.04: systemctl status NAME.service

funziona per tutti loro: service --status-all


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.