Wo ist der Prozess des Services?

617
Peter Krauss

service postgresql statusListen bei UBUNTU

 Process: 18534 ExecStart=/bin/true (code=exited, status=0/SUCCESS) Main PID: 18534 (code=exited, status=0/SUCCESS) 

aber wenn ich teste ist sudo ps -ax | grep 18534nichts aufgelistet.


ANMERKUNGEN

EDIT1 für @DanielB Anfrage, aber ich brauche einen einfachen Befehl, zeigt jede Dienstleistung PID.

Hier eine Müllkippe more /lib/systemd/system/postgresql.service,

# systemd service for managing all PostgreSQL clusters on the system. This # service is actually a systemd target, but we are using a service since # targets cannot be reloaded.  [Unit] Description=PostgreSQL RDBMS  [Service] Type=oneshot ExecStart=/bin/true ExecReload=/bin/true RemainAfterExit=on  [Install] WantedBy=multi-user.target 

EDIT2

Das PostgreSQL oben war mein localhost-Server ... Jetzt teste ich in einem "neuen, sauberen" DigitalOcean-Droplet mit UBUNTU 16 LTS und Postgresql 9.X ...

root@myServer:~# service postgresql status ● postgresql.service - PostgreSQL RDBMS Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled) Active: active (exited) since Dom 2016-12-18 17:47:09 UTC; 2 weeks 4 days ago Main PID: 8703 (code=exited, status=0/SUCCESS) Tasks: 0 Memory: 0B CPU: 0 CGroup: /system.slice/postgresql.service  Dez 18 17:47:09 myServer systemd[1]: Starting PostgreSQL RDBMS... Dez 18 17:47:09 myServer systemd[1]: Started PostgreSQL RDBMS. Dez 18 17:47:14 myServer systemd[1]: Started PostgreSQL RDBMS.   root@myServer:~# sudo ps -ax | grep 8703 3702 pts/0 S+ 0:00 grep --color=auto 8703  root@myServer:~# sudo service postgresql restart  root@myServer:~# sudo ps -ax | grep 8703 3760 pts/0 S+ 0:00 grep --color=auto 8703   root@myServer:~# service postgresql status ● postgresql.service - PostgreSQL RDBMS Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled) Active: active (exited) since Sex 2017-01-06 16:06:07 UTC; 8s ago Process: 3755 ExecStart=/bin/true (code=exited, status=0/SUCCESS) Main PID: 3755 (code=exited, status=0/SUCCESS)  Jan 06 16:06:07 myServer systemd[1]: Starting PostgreSQL RDBMS... Jan 06 16:06:07 myServer systemd[1]: Started PostgreSQL RDBMS.   sudo ps -ax | grep 3755 3780 pts/0 S+ 0:00 grep --color=auto 3755 
0
Nun, `/ bin / true` ist offensichtlich nicht der Service. Es ist auch als beendet gekennzeichnet. Bitte geben Sie den Inhalt von `/ lib / systemd / system / postgresql.service` an. Daniel B vor 7 Jahren 0
Hi @DanielB, ich habe mit dem Dump editiert. Peter Krauss vor 7 Jahren 0
Für andere Dienste als "Service Postfix Status" ist dies in Ordnung (!). Das Problem mit PostgreSQL ist vielleicht eine Art "Thread-Aktivierung" ... Vielleicht brauche ich den Dienst bei "top", oder? Peter Krauss vor 7 Jahren 0
"Ich brauche einen einfachen Befehl, der die Dienst-PID anzeigt." - Das wird wahrscheinlich nicht passieren. Davon abgesehen, was ist das f? Daniel B vor 7 Jahren 0
Es scheint mir, dass `postgresql` nicht läuft. Prozesse haben einen Exit-Code, nachdem sie beendet wurden. Es ist nicht sinnvoll, den Exit-Code eines aktuell laufenden Prozesses anzugeben. janos vor 7 Jahren 1
@janos Dieser Dienst startet PostgreSQL offensichtlich nicht. Es ist Teil eines schlechten Hacks. Daniel B vor 7 Jahren 1
http://serverfault.com/questions/818838/postgresql-exits-after-being-started Hier erfahren Sie, was los ist. Ich denke immer noch, dass es bs ist. Daniel B vor 7 Jahren 0
@Janos der Dienst lebt, wie ich gezeigt habe (und nun bestätigen). ... Ich kenne das Verhalten von * Daemon * (und dessen PIDs) nicht, vielleicht brauchen wir ein besseres Wissen darüber ... Als Link von Daniel. Peter Krauss vor 7 Jahren 0
@ PeterKrauss Sie haben nicht gezeigt, dass es lebt. Sie könnten jedoch etwas versuchen. Auf welchem ​​Port hört der Dienst zu? Wenn Sie mit Linux arbeiten (bitte bestätigen), können Sie durch Ausführen von sudo netstat -ntlp | überprüfen, ob der Port aktiv ist grep: die Portnummer ". Dieser Befehl zeigt auch die Prozess-ID an. Fügen Sie diese Informationen in Ihre Frage ein. janos vor 7 Jahren 0
Danke @janos, siehe meine EDIT2. Über den Port: `sudo netstat -ntlp | grep 5432` zeigt `tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN 3738 / postgres` (für beide Maschinen). Peter Krauss vor 7 Jahren 0
@janos ja! Sie finden, "LISTEN 3738 / postgres" ist die PID! ... `sudo ps -ax | grep 3738` gibt jetzt `3738 zurück? S 0:00 /usr/lib/postgresql/9.5/bin/postgres -D /var/lib/postgresql/9.5/main -c` Peter Krauss vor 7 Jahren 0

2 Antworten auf die Frage

1
janos

Die PID des Dienstes scheint hier nirgends angegeben zu werden:

 Process: 18534 ExecStart=/bin/true (code=exited, status=0/SUCCESS) Main PID: 18534 (code=exited, status=0/SUCCESS) 

Ich sage das, weil diese Nachricht von Exit-Code spricht, der für einen laufenden Prozess nicht sinnvoll ist. Nur beendete Prozesse haben einen Exit-Code.

Wenn der Postgres-Dienst ausgeführt wird, können Sie in einem GNU / Linux-System dessen PID in der Ausgabe von sudo netstat -ntlp | grep posgresbeispielsweise finden:

tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN 3738/postgres 

In dieser Art von Ausgabe ist 3738 die PID.

Als Randbemerkung ps -ax | grep the-pidist es besser, einen Prozess durch PID zu überprüfen, anstatt ihn auszuführen ps -p the-pid.

1
grawity

Es gibt keine, da, wie Sie sich anhand des Inhalts der Einheit sehen können, postgresql.servicekein Dämon gestartet wird. Es existiert lediglich als "übergeordneter" Dienst, um verschiedene Instanzen zusammenzufassen postgresql@.service(dh alle gleichzeitig aufzuladen). Schauen Sie sich stattdessen an:

systemctl status postgresql@\*.service 
Perfekt! Hum ... aber es ist generisch? "systemctl status postfix @ \ *. service" zeigt nichts an, obwohl "service postfix status" PIDs zeigt. Peter Krauss vor 7 Jahren 0
@ PeterKrauss: Das sind eigentlich zwei verschiedene Dienste. `postgresql @ .service` wurde explizit so benannt, um Multiinstanz zu sein (siehe den Inhalt), und später wurde ein separater` postgresql.service` hinzugefügt, um den 'reload'-Trick auszuführen - vielleicht, weil systemctl damals nicht funktioniert hat unterstützen Sie noch nicht die Platzhalter, oder vielleicht fühlte sich jemand einfach nur faul. grawity vor 7 Jahren 0
Hm .. ok (!), Die Syntax ist `systemctl status postfix.service`, es funktioniert gut! So ist es generisch! "systemctl statt service verwenden" ist die beste Antwort, danke! Peter Krauss vor 7 Jahren 0