เซิร์ฟเวอร์ PostgreSQL จะไม่หยุดทำงาน


88

มีปัญหาเล็กน้อยกับ PostgreSQL บน Mac OS X 10.8.4 ฉันบังเอิญทำbrew rm postgresql --forceในขณะที่เซิร์ฟเวอร์ postgres กำลังทำงาน เมื่อฉันติดตั้งโดยใช้brew install postgresqlและรันpg_ctl -D /usr/local/var/postgres startฉันจะได้รับ:

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

เมื่อฉันเรียกใช้ "ps -ef | grep postgres" ฉันจะได้รับ:

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

เมื่อฉันพยายามหยุดเซิร์ฟเวอร์ด้วยpg_ctl stop -D /usr/local/var/postgres -m fastหรือpg_ctl -D /usr/local/var/postgres stop -miฉันได้รับ:

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

แก้ไข

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

ส่วนสำคัญของserver.log: https://gist.github.com/anonymous/6106182


1
ไม่pg_ctl -D /usr/local/var/postgres stop -m immediateได้รับการเพิ่มเติมใด ๆ กว่าที่อื่น ๆ ทั้งสองพยายาม?
bma

นั่นจะเหมือนกับการวิ่งpg_ctl -D /usr/local/var/postgres stop -miและใช่สิ่งที่ฉันได้รับคือ "เซิร์ฟเวอร์ไม่ปิดตัวลง"
Parker Hutchinson

ฉันเดาอย่างนั้น แต่การมองอย่างรวดเร็วpostgres --helpไม่ได้แสดงธง "m" ในทันที
bma

brew reinstall postgresql stackoverflow.com/a/39781473/6086226ทำงานให้ฉัน
Derk Jan Speelman

คำตอบ:


164

มีปัญหาเดียวกัน, pg_ctl: server does not shut down. นอกจากนี้ps auxwww | grep postgresแสดงให้เห็นว่าไม่มี postgres ทำงานในขณะที่pg_ctl -D /usr/local/var/postgres statusแสดงให้เห็นว่า postgres กำลังทำงานอยู่ การรีสตาร์ท Mac ของฉันไม่ได้ช่วยฉันไปไกลถึงการรีเซ็ต SMC แต่ SO Q / A นี้ทำให้ฉันรู้ว่าจะต้องค้นหาอะไรต่อไป: ปัญหาการชง

ตามแนวความคิดนี้ฉันพบบล็อกโพสต์ที่เป็นประโยชน์ซึ่งมาจากคำสั่งต่อไปนี้ที่แก้ไขปัญหานี้ให้ฉัน:

$ brew services list
$ brew services restart postgresql

หวังว่านี่จะช่วยใครบางคนได้

อัปเดต - คำสั่งที่ไม่รู้จัก: บริการ

หลังจากการตรวจสอบเล็กน้อยตามความคิดเห็น ('Unknown command: services') ฉันพบว่าผู้เขียน Homebrew ตัดสินใจที่จะลบ servicesจาก repo เนื่องจากไม่มีใครต้องการรักษารหัสนี้

คุณสามารถอ่านเพิ่มเติมได้ที่นี่และที่นี่ (ตั๋ว github ที่เกี่ยวข้อง)

หลังจากขุดเพิ่มเติมฉันพบrepo นี้ที่เพิ่มservicesใน macs

นี่คือวิธีที่ฉัน 'กลับ' 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

นี่เป็นอีกวิธีที่แนะนำ: /apple/150300/need-help-using-homebrew-services-command ไม่ได้ตรวจสอบเองเลยไม่รู้ว่ามันทำงานอย่างไร


4
สิ่งนี้ล้าสมัยไปแล้วนามแฝง bash จำนวนมากที่ฉันสะสมมาตลอดหลายปีสำหรับการทำสิ่งเดียวกัน ดูดี!
Alex Kestner

2
@naturalc อัปเดตคำตอบของฉันตามความคิดเห็นของคุณ บอกฉันว่ามันใช้ได้สำหรับคุณ
Neara

1
แก้ไขปัญหาให้ฉัน ขอบคุณ!
TotoroTotoro

สำหรับการใด ๆ Rails ผู้ใช้ออกจากที่นั่นผมพยายาม Postgres bundle exec rake pg:stopหยุดผ่านคำสั่งคราดปกติ pg_ctl: server does not shut downแต่ที่ไม่ได้ทำงานที่นำไปสู่ วิธีแก้ปัญหาbrew services restart postgresqlได้ผลสำหรับฉัน 👌
zbeat

ขอบคุณผู้ชาย! ฉันคิดไม่ออกว่าเป็นบริการ homebrew ที่กำลังทำงานอยู่ ทำได้ดีนี่!
Adrian Grzywaczewski

57

$ brew services list

$ brew services stop postgresql

กำลังหยุดpostgresqlแต่อาจใช้เวลาสักครู่→หยุดสำเร็จpostgresql(ป้ายกำกับ: homebrew.mxcl.postgresql)


2
พยายามหยุดpg_ctl ... stopโดยไม่มีประโยชน์ เมื่อฉันเรียกใช้บริการชงให้หยุด postgresql pg_ctl ของฉัน ... หยุดทำงานตามที่คาดไว้อีกครั้งในตอนนี้ ไม่แน่ใจว่าอย่างไร แต่ฉันดีใจที่สิ่งนี้แก้ไขได้!
Iggy

ฉันต้องการเพิ่มเวอร์ชันด้วย brew services stop postgresql@10
Ivor Scott

12

ฉันมีปัญหาที่คล้ายกัน ฉันลืมไปแล้วว่าฉันได้รวม 'lunchy' ไว้เมื่อสองสามวันก่อนและใช้มันเป็นเครื่องห่อ Launchctl เพื่อเริ่ม~/Library/LaunchAgents/homebrew.mxcl.postgresql.plistต้นการเริ่มต้น pg_ctl ไม่ได้ผลเนื่องจากโค้ดบรรทัดต่อไปนี้<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>

การพยายามฆ่ากระบวนการโดยตรงไม่ได้ผลเพราะฉันต้องการยกเลิกการโหลด plist

    launchctl unload homebrew.mxcl.postgresql.plist

โปรดทราบว่าไฟล์. plist อาจไม่มีชื่อเดียวกัน homebrew.mxcl.postgresql92.plistในกรณีของฉันมันเป็น ตรวจสอบตัวเอง
MCP

12

ฉันประสบปัญหาเดียวกัน ... การลบตัวแทนการเปิดตัวช่วยแก้ปัญหาให้ฉัน:

launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
rm ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

10

ฉันพบข้อผิดพลาดนี้โดยใช้คำสั่ง

pg_ctl stop -m immediate

pg_ctl start

ฉันไม่จำเป็นต้องยกเลิกการโหลด plist ด้วยวิธีนี้


5
ฉันได้รับ pg_ctl: ไม่ได้ระบุไดเร็กทอรีฐานข้อมูลและตัวแปรสภาพแวดล้อม PGDATA unset
SuperUberDuper

1
ได้รับข้อผิดพลาดเดียวกัน: ไม่ได้ระบุไดเร็กทอรีฐานข้อมูลและตัวแปรสภาพแวดล้อม PGDATA unset
jjj

2
@SuperUberDuper คุณควรเพิ่ม -D และระบุตำแหน่งฐานข้อมูล ตัวอย่างเช่น: pg_ctl stop -m ทันที -D "." ย่อมาจากไดเร็กทอรีปัจจุบันสมมติว่าคุณอยู่ในไดเร็กทอรีฐานข้อมูล
Hatzil

8

ปรากฎว่า brew.plist ของฉันสำหรับ postgres จำเป็นต้องยกเลิกการโหลดและลบออกที่ ~ / Library / LaunchAgents / หลังจากรีสตาร์ททุกอย่างเรียบร้อยดี ... ปิดคำถาม


7
โปรดขยายความในเรื่องนี้
SuperUberDuper

7

เมื่อใช้ PostgreSQL ที่ติดตั้งแบบชงคำสั่งต่อไปนี้จะใช้สำหรับปิดเครื่อง

> brew services stop postgresql

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

ดังที่ได้กล่าวไว้ในคำตอบอื่นที่ grepping ผ่านรายการกระบวนการและการฆ่าสิ่งที่เกี่ยวข้องกับ postgres ไม่ได้ผล

ps aux | grep postgres
kill $PID

0

ฉันไม่ได้postgresเริ่มต้นด้วยbrew servicesดังนั้นจึงหยุดมันไม่ได้

สิ่งนี้ได้ผล

$ 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

ใช้-Dพารามิเตอร์จากด้านบน

$ pg_ctl stop -D "/Users/username/Library/Application Support/Postgres/var-9.6"
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.