Der PostgreSQL-Server wird nicht gestoppt

85

Ein kleines Problem mit PostgreSQL unter Mac OS X 10.8.4. Ich habe es versehentlich getan, brew rm postgresql --forcewährend der Postgres-Server lief. Wenn ich mit installiert brew install postgresqlund ausgeführt pg_ctl -D /usr/local/var/postgres starthabe, bekomme ich:

pg_ctl: another server might be running; trying to start server anyway
server starting
FATAL:  lock file "postmaster.pid" already exists                                                                       
HINT:  Is another postmaster (PID 752) running in data directory "/usr/local/var/postgres"?

Wenn ich "ps -ef | grep postgres" starte, bekomme ich:

501   752   235   0 12:42PM ??         0:00.01 /usr/local/opt/postgresql/bin/postgres -D /usr/local/var/postgres -r /usr/local/var/postgres/server.log
501   754   752   0 12:42PM ??         0:00.00 postgres: checkpointer process       
501   755   752   0 12:42PM ??         0:00.34 postgres: writer process       
501   756   752   0 12:42PM ??         0:00.02 postgres: wal writer process       
501   757   752   0 12:42PM ??         0:00.01 postgres: autovacuum launcher process       
501   758   752   0 12:42PM ??         0:00.01 postgres: stats collector process       
501   945   452   0 12:58PM ttys000    0:00.00 grep postgres

wenn ich versuche den Server zu stoppen mit pg_ctl stop -D /usr/local/var/postgres -m fastoder pg_ctl -D /usr/local/var/postgres stop -miich bekomme:

waiting for server to shut down........................................... Failed
pg_ctl: server does not shut down

BEARBEITEN

which pg_ctl
/usr/local/bin/pg_ctl
pg_ctl --version
pg_ctl (PostgreSQL) 9.2.4

Inhalt von server.log: https://gist.github.com/anonymous/6106182

Parker Hutchinson
quelle
1
Kommt pg_ctl -D /usr/local/var/postgres stop -m immediateman weiter als die beiden anderen Versuche?
Bma
Das wäre das gleiche wie Laufen pg_ctl -D /usr/local/var/postgres stop -miund ja, alles was ich bekomme ist "Server fährt nicht herunter"
Parker Hutchinson
Ich habe das erraten, aber ein kurzer Blick auf postgres --helpzeigte nicht sofort die "m" -Flagge.
Bma
brew reinstall postgresql stackoverflow.com/a/39781473/6086226 arbeitete für mich
Derk Jan Speelman

Antworten:

157

Hatte das gleiche Problem , pg_ctl: server does not shut down. Außerdem wurde ps auxwww | grep postgreskein Postgres ausgeführt, während pg_ctl -D /usr/local/var/postgres statusgezeigt wurde, dass Postgres ausgeführt wird. Ein Neustart meines Mac hat nicht geholfen, ich bin sogar so weit gegangen, SMC zurückzusetzen, aber diese SO-Frage / Antwort gab mir eine Idee, worauf ich als nächstes achten sollte: Probleme beim Brauen.

Nach diesem Gedankengang fand ich diesen hilfreichen Blog-Beitrag , der sich auf folgende Befehle bezog, die dieses Problem für mich lösten:

$ brew services list
$ brew services restart postgresql

Hoffe das wird jemandem helfen.

Update - Unbekannter Befehl: Dienste

Nach einigem Nachforschen nach einem der Kommentare ('Unbekannter Befehl: Dienste') fand ich heraus, dass die Autoren von Homebrew beschlossen, ihn zu entfernen services das Repo , da niemand diesen Code beibehalten möchte.

Hier und hier können Sie mehr darüber lesen (verwandte Github-Tickets).

Nach einigem Graben fand ich dieses Repo, das servicesauf Macs hinzugefügt wird.

So bin ich zurückgekehrt services:

~ » brew tap gapple/services
~ » brew services
usage: [sudo] brew services [--help] <command> [<formula>]

Small wrapper around `launchctl` for supported formulae, commands available:
   cleanup Get rid of stale services and unused plists
   list    List all services managed by `brew services`
   restart Gracefully restart selected service
   start   Start selected service
   stop    Stop selected service

Options, sudo and paths:

  sudo   When run as root, operates on /Library/LaunchDaemons (run at boot!)
  Run at boot:  /Library/LaunchDaemons
  Run at login: /Users/user/Library/LaunchAgents

Hier ist eine weitere vorgeschlagene Lösung: /apple/150300/need-help-using-homebrew-services-command . Ich habe es nicht selbst überprüft, weiß also nicht, ob und wie es funktioniert.

In der Nähe von
quelle
4
Dies veraltet so viele Bash-Aliase, die ich im Laufe der Jahre angesammelt habe, um genau das Gleiche zu tun. Gut aussehen!
Alex Kestner
2
@naturalc hat meine Antwort als Antwort auf Ihren Kommentar aktualisiert. Sag mir, ob es für dich in Ordnung ist.
Neara
1
Das Problem wurde für mich gelöst. Vielen Dank!
TotoroTotoro
Für alle Rails-Benutzer da draußen habe ich versucht, Postgres über den üblichen Rake-Befehl zu stoppen bundle exec rake pg:stop. Aber das hat nicht funktioniert und dazu geführt pg_ctl: server does not shut down. Die Problemumgehung brew services restart postgresqlhat bei mir funktioniert. 👌
zbeat
Danke, Mann! Ich konnte mir nicht vorstellen, dass es sich tatsächlich um einen Homebrew-Dienst handelte. Schön!
Adrian Grzywaczewski
51

$ brew services list

$ brew services stop postgresql

Anhalten postgresql, aber es kann eine Weile dauern → Erfolgreich gestoppt postgresql(label: homebrew.mxcl.postgresql)


quelle
2
Versuchte pg_ctl ... stopohne Erfolg anzuhalten . Sobald ich Brew Services Stop Postgresql ausgeführt habe, funktioniert mein pg_ctl ... Stop jetzt wieder wie erwartet. Ich weiß nicht wie, aber ich bin froh, dass dies das Problem gelöst hat!
Iggy
Ich musste die Version damit hinzufügen. brew services stop postgresql@10
Ivor Scott
12

Ich hatte ein ähnliches Problem. Ich hatte vergessen, dass ich vor ein paar Tagen "Lunchy" integriert hatte und es als Launchctl-Wrapper verwendete, um die Plist ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plistbeim Start zu starten. pg_ctl war aufgrund der folgenden Codezeile nicht wirksam <key>KeepAlive<key>:

      <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
     3 <plist version="1.0">
     4 <dict>
     5   <key>KeepAlive</key>
     6   <true/>
     7   <key>Label</key>
     8   <string>homebrew.mxcl.postgresql</string>
     9   <key>ProgramArguments</key>
    10   <array>
    11     <string>/usr/local/opt/postgresql/bin/postgres</string>
    12     <string>-D</string>
    13     <string>/usr/local/var/postgres</string>
    14     <string>-r</string>
    15     <string>/usr/local/var/postgres/server.log</string>
    16   </array>
    17   <key>RunAtLoad</key>
    18   <true/>
    19   <key>WorkingDirectory</key>
    20   <string>/usr/local</string>
    21   <key>StandardErrorPath</key>
    22   <string>/usr/local/var/postgres/server.log</string>
    23 </dict>
    24 </plist>

Der Versuch, den Prozess direkt abzubrechen, funktionierte nicht, da ich die Liste entladen musste.

    launchctl unload homebrew.mxcl.postgresql.plist
user3155603
quelle
Beachten Sie, dass die .plist-Datei möglicherweise nicht genau denselben Namen hat. In meinem Fall war es homebrew.mxcl.postgresql92.plist. Überprüfe dich.
MCP
12

Ich hatte das gleiche Problem ... das Entfernen des Startagenten löste das Problem für mich:

launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
rm ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Max Bentata
quelle
10

Ich habe diesen Fehler mit dem Befehl umgangen

pg_ctl stop -m immediate

pg_ctl start

Ich musste die Liste nicht auf diese Weise entladen.

Elliott Harrison
quelle
5
Ich bekomme pg_ctl: kein Datenbankverzeichnis angegeben und Umgebungsvariable PGDATA nicht gesetzt
SuperUberDuper
1
den gleichen Fehler erhalten: kein Datenbankverzeichnis angegeben und Umgebungsvariable PGDATA nicht gesetzt
jjj
2
@SuperUberDuper Sie sollten -D hinzufügen und den Datenbankspeicherort angeben. Zum Beispiel: pg_ctl stop -m sofort -D. "." steht für das aktuelle Verzeichnis, vorausgesetzt, Sie befinden sich im Datenbankverzeichnis
Hatzil
8

Es stellte sich heraus, dass meine Brew.plist für Postgres unter ~ / Library / LaunchAgents / entladen und entfernt werden musste. Nach einem Neustart ist alles in Ordnung ... Abschlussfrage.

Parker Hutchinson
quelle
6
Bitte erweitern Sie dies
SuperUberDuper
7

Wenn Sie sich auf das von Brew installierte PostgreSQL verlassen, funktioniert der folgende Befehl zum Herunterfahren.

> brew services stop postgresql

stopping `postgresql`... (might take a while)
==> Successfully stopped `postgresql` (label: homebrew.mxcl.postgresql)

Wie in einer anderen Antwort erwähnt greppen durch die Liste der Prozesse und dann alles , was das Töten Postgres bezogene hat nicht Arbeit.

ps aux | grep postgres
kill $PID
Peter Lustig
quelle
0

Ich hatte nicht über postgresbegonnen brew services, konnte es also nicht aufhalten.

Das hat funktioniert.

$ ps -ef | grep postgres
501   547     1   0  2:07pm ??         0:00.29 /Applications/Postgres.app/Contents/Versions/9.6/bin/postgres -D /Users/username/Library/Application Support/Postgres/var-9.6 -p 5432

Verwenden Sie den -DParameter von oben.

$ pg_ctl stop -D "/Users/username/Library/Application Support/Postgres/var-9.6"
M3RS
quelle