So überprüfen Sie, ob ein bestimmter Dienst unter Ubuntu ausgeführt wird


253

Ich kenne den Namen des Dienstes nicht, möchte den Dienst jedoch stoppen, indem ich seinen Status überprüfe.

Wenn ich beispielsweise überprüfen möchte, ob der PostgreSQL- Dienst ausgeführt wird oder nicht, aber den Namen des Dienstes nicht kennt, wie kann ich dann seinen Status überprüfen?

Ich kenne den Befehl zum Überprüfen des Status, wenn der Dienstname bekannt ist.


1
Woher wissen Sie, dass es sich um den richtigen Dienst handelt, wenn Sie den Namen nicht kennen? Ich kann /etc/init.d/ viele Init-Skripte mit Namen hinzufügen, die das Schlüsselwort postgres enthalten (obwohl dies sinnlos wäre!), Und woher wissen Sie, dass es sich um den Dienst handelt, den Sie beenden möchten? Bitte fügen Sie eine Erklärung für Ihren Kontext hinzu
Stefan

1
@Stefan Da ich neu in Linux-Befehlen bin, würde ich gerne wissen, ob ich den richtigen Dienstnamen nicht kenne, aber teilweise einen Teil des
Dienstnamens

1
Sie können die Servicelisten oder ps -ef verwenden und die Ausgaben analysieren. Jedenfalls halte ich dies nicht für eine gute Idee, Dienste zu stoppen, von denen Sie glauben , dass sie gestoppt werden müssen, aber nicht sicher sind . Daher sollten Sie eine Liste mit den tatsächlichen Dienstnamen erstellen, die auf dem Computer ausgeführt werden, den Sie stoppen möchten. Wenn Sie nur "Standard" -Dienste wie postgres, mysql, http stoppen möchten, können Sie die Dienstnamen ganz einfach herausfinden.
Stefan

Überprüfen Sie askubuntu Gruppe: askubuntu.com/questions/407075/…
svassr

Antworten:


438

Ich habe keine Ubuntu-Box, aber unter Red Hat Linux können Sie alle laufenden Dienste anzeigen, indem Sie den folgenden Befehl ausführen:

service --status-all

In der Liste +zeigt an, dass der Dienst ausgeführt wird, -dass der Dienst nicht ausgeführt wird und ?dass der Dienststatus nicht ermittelt werden kann.


3
Vielen Dank. In der Dokumentation wird nicht angegeben, was die Symbole neben den einzelnen Diensten bedeuten. Ich würde vermuten, dass "+" bedeutet, dass es läuft und "-" bedeutet, dass es nicht ... dann gibt es das "?" neben vielen. + heißt rennen?
Oscar

89
"+" gestartet "-" gestoppt "?" unbekannte Quelle
gkiko

Wie würde ich das auf Redhat (Centos) machen
PolarisUser

14
Irgendeine Idee, warum ein Dienst markiert ist, [-] {name}aber sudo service {name} statusals ausgeführt angezeigt wird?
Mark Murphy

6
Vielleicht möchten Sie auch laufen sudo initctl list, wie von @linuxnewbee hier später erwähnt.
Svassr

79

Für Ubuntu (geprüft mit 12.04)

Sie können eine Liste aller Dienste abrufen und einen von ihnen mit 'grep' nach Farbe auswählen:

sudo service --status-all | grep postgres

Oder Sie können einen anderen Weg wählen, wenn Sie den richtigen Namen des Dienstes kennen:

sudo service postgresql status

4
Ich sehe keinen Grep-Effekt (auch mit Ubuntu 12.04).
Notapatch

2
Der richtige Weg zu grep ist:sudo service --status-all 2>&1 | grep postgres
Adam Chwedyk

sudo service x statusmeldet sich Active: inactive (dead)hier für einen laufenden Dienst, Ubuntu 15.04 (Vivid)
Dinei

39

Vielleicht möchten Sie den Befehl ps.

ps -ef

zeigt Ihnen alle laufenden Prozesse. Wenn Sie eine Vorstellung davon haben, wonach Sie suchen, verwenden Sie grep zum Filtern.

ps -ef | grep postgres

2
Manchmal stimmt der Prozessname nicht mit dem Dienstnamen überein.
Francisco Quintero

Wahrscheinlich ist besser pgrep -a postgres. Dies vermeidet auch die nervigen grep --color=auto needle.
Pablo A


16

Es gibt eine einfache Möglichkeit, um zu überprüfen, ob ein Dienst ausgeführt wird

systemctl status service_name

Versuchen Sie PostgreSQL:

systemctl status postgresql

6

Mit dem folgenden Befehl können Sie die Liste aller Dienste überprüfen.

ps aux 

So überprüfen Sie Ihren eigenen Service:

ps aux | grep postgres

Dies ist identisch mit der obigen Antwort
Pablo A

2

Der beste Weg ist die Verwendung des nmapWerkzeugs im Terminal. nmap ist ein nützliches Tool, mit dem ein Up-System analysiert werden kannIP Address und dann alle aktivierten Netzwerke anzeigt services.

Öffnen terminalund Verwenden dieses Beispiels:

~$ 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
Dies funktioniert natürlich nur, wenn es sich um einen Netzwerkdienst handelt.
Molomby

2

Lauf

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

Der obige Befehl gibt alle Details wie PID und Startzeit für den Prozess an.

Zum Beispiel, wenn Sie möchten, dass alle Java-Prozesse Java ausführen, oder wenn Sie den Namen des Prozesses haben, geben Sie den Namen ein


Dies funktioniert so lange, bis der Dienstname 8 Zeichen oder weniger enthält. Andernfalls wird die Liste abgeschnitten.
Tomas Kubes

0

Schmutziger Weg, um laufende Dienste zu finden. (Manchmal ist es nicht korrekt, weil einige benutzerdefinierte Skripte nicht über die Option | status | verfügen.)

[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

Für Centos hat das folgende Kommando für mich funktioniert (:

locate postgres | grep service

Ausgabe:

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

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

sudo systemctl status postgresql-9.3.service

0

So überprüfen Sie den Status eines Dienstes unter Linux:

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

Service stoppen oder starten

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

So erhalten Sie die Liste aller Dienste zusammen mit der PID:

sudo service --status-all

Sie können systemctl verwenden, anstatt den Dienst direkt aufzurufen:

systemctl status/start/stop {service_name}

0

für Centos 6.10: /sbin/service serviceNAME status

für Centos 7.6 und Ubuntu 18.04: systemctl status NAME.service

funktioniert für alle: service --status-all


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.