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


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.


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)


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

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

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.


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.


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

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"
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.