Server PostgreSQL tidak akan berhenti

88

Memiliki sedikit masalah dengan PostgreSQL di Mac OS X 10.8.4. Saya tidak sengaja melakukannya brew rm postgresql --forcesaat server postgres sedang berjalan. Ketika saya menginstal menggunakan brew install postgresqldan menjalankan pg_ctl -D /usr/local/var/postgres startsaya mendapatkan:

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

ketika saya menjalankan "ps -ef | grep postgres" saya mendapatkan:

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

ketika saya mencoba menghentikan server dengan pg_ctl stop -D /usr/local/var/postgres -m fastatau pg_ctl -D /usr/local/var/postgres stop -misaya mendapatkan:

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

EDIT

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

Inti dari server.log: https://gist.github.com/anonymous/6106182

Parker Hutchinson
sumber
1
Apakah pg_ctl -D /usr/local/var/postgres stop -m immediatelebih jauh dari dua upaya lainnya?
bma
Itu akan sama dengan berlari pg_ctl -D /usr/local/var/postgres stop -midan ya yang saya dapatkan hanyalah "Server tidak mati"
Parker Hutchinson
Aku menebaknya, tapi sekilas postgres --helptidak langsung menunjukkan bendera "m".
bma
brew reinstall postgresql stackoverflow.com/a/39781473/6086226 bekerja untuk saya
Derk Jan Speelman

Jawaban:

164

Punya masalah yang sama pg_ctl: server does not shut down,. Selanjutnya ps auxwww | grep postgrestidak ada postgres running, sedangkan pg_ctl -D /usr/local/var/postgres statuspostgres running. Memulai ulang mac saya tidak membantu, saya bahkan melangkah lebih jauh untuk mengatur ulang SMC, tetapi SO Q / A ini memberi saya ide apa yang harus dicari selanjutnya: masalah pembuatan bir.

Mengikuti alur pemikiran ini, saya menemukan posting blog yang bermanfaat ini , yang turun ke perintah berikut yang memecahkan masalah ini untuk saya:

$ brew services list
$ brew services restart postgresql

Semoga ini bisa membantu seseorang.

Perbarui - Perintah tidak dikenal: layanan

Setelah sedikit penyelidikan mengikuti salah satu komentar ('Perintah tidak dikenal: layanan'), saya menemukan bahwa penulis Homebrew memutuskan untuk menghapus services dari repo, mengingat tidak ada yang mau mempertahankan kode ini.

Anda dapat membaca lebih lanjut tentang itu di sini dan di sini (tiket github terkait).

Setelah menggali lebih banyak, saya menemukan repo ini yang ditambahkan servicesdi Mac.

Beginilah cara saya 'kembali' 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

Berikut adalah solusi lain yang disarankan: /apple/150300/need-help-using-homebrew-services-command . Tidak memeriksanya sendiri, jadi tidak tahu apakah dan bagaimana cara kerjanya.

Dekat dengan
sumber
4
Ini menghilangkan begitu banyak alias bash yang telah saya kumpulkan selama bertahun-tahun karena melakukan hal yang persis sama. Penampilan bagus!
Alex Kestner
2
@naturalc memperbarui jawaban saya sebagai tanggapan atas komentar Anda. beri tahu saya jika ini berfungsi dengan baik untuk Anda.
Neara
1
Memecahkan masalah untuk saya. Terima kasih!
TotoroTotoro
Untuk pengguna Rails mana pun di luar sana, saya mencoba menghentikan Postgres melalui perintah Rake biasa bundle exec rake pg:stop,. Tapi itu tidak berhasil, mengarah ke pg_ctl: server does not shut down. Solusi itu brew services restart postgresqlberhasil untuk saya. 👌
zbeat
Terima kasih sobat! Saya tidak dapat membayangkan bahwa itu sebenarnya adalah layanan homebrew yang sedang berjalan. Bagus!
Adrian Grzywaczewski
57

$ brew services list

$ brew services stop postgresql

Berhenti postgresql, tetapi mungkin perlu beberapa saat → Berhasil dihentikan postgresql(label: homebrew.mxcl.postgresql)


sumber
2
Mencoba berhenti pg_ctl ... stoptanpa hasil. Setelah saya menjalankan layanan pembuatan bir, berhenti postgresql, pg_ctl saya ... berhenti berfungsi seperti yang diharapkan lagi sekarang. Tidak yakin bagaimana caranya, tapi saya senang ini menyelesaikannya!
Iggy
Saya perlu menambahkan versi dengannya. brew services stop postgresql@10
Ivor Scott
12

Saya memiliki masalah serupa. Saya lupa bahwa saya mengintegrasikan 'makan siang' beberapa hari yang lalu dan menggunakannya sebagai pembungkus launchctl untuk memulai plist ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plistsaat memulai. pg_ctl tidak efektif karena baris kode berikut <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>

Mencoba mematikan proses secara langsung tidak berhasil karena saya perlu membongkar plist.

    launchctl unload homebrew.mxcl.postgresql.plist
pengguna3155603
sumber
Perhatikan bahwa file .plist mungkin tidak memiliki nama yang sama persis. Dalam kasus saya itu homebrew.mxcl.postgresql92.plist. Periksa dirimu sendiri.
MCP
12

Saya mengalami masalah yang sama ... menghapus agen peluncuran memecahkan masalah bagi saya:

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

Saya mengatasi kesalahan ini dengan menggunakan perintah

pg_ctl stop -m immediate

pg_ctl start

Saya tidak perlu membongkar plist dengan cara ini.

Elliott Harrison
sumber
5
Saya mendapatkan pg_ctl: tidak ada direktori database yang ditentukan dan variabel lingkungan PGDATA tidak disetel
SuperUberDuper
1
mendapatkan kesalahan yang sama: tidak ada direktori database yang ditentukan dan variabel lingkungan PGDATA tidak disetel
jjj
2
@SuperUberDuper Anda harus menambahkan -D dan menentukan lokasi db. Misalnya: pg_ctl stop -m soon -D. "." singkatan dari direktori saat ini, dengan asumsi Anda berada di direktori database
Hatzil
8

ternyata brew.plist saya untuk postgres perlu dibongkar dan dihapus di ~ / Library / LaunchAgents /. Setelah restart semuanya baik-baik saja ... pertanyaan penutup.

Parker Hutchinson
sumber
7
harap kembangkan ini
SuperUberDuper
7

Saat mengandalkan PostgreSQL yang diinstal brew, perintah berikut berfungsi untuk mematikannya.

> brew services stop postgresql

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

Seperti yang disebutkan dalam jawaban lain, menelusuri daftar proses dan kemudian membunuh apa pun yang terkait dengan postgres tidak berfungsi.

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

Saya tidak postgresmemulai melalui brew services, jadi tidak bisa menghentikannya seperti itu.

Ini berhasil.

$ 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

Gunakan -Dparameter dari atas.

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