PostgreSQL服务器不会停止


87

在Mac OS X 10.8.4上的PostgreSQL有点问题。我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 fastpg_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.loghttps : //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,

Answers:


162

有相同的问题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

希望这会帮助某人。

更新-未知命令:服务

经过对其中一条注释(“未知命令:服务”)的调查,我发现Homebrew的作者决定services从存储库中删除该文件,因为没人愿意维护此代码。

您可以在此处此处(有关github票证)中了解更多信息。

经过更多挖掘后,我发现回购添加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

这是另一个建议的解决方案:https : //apple.stackexchange.com/questions/150300/need-help-using-homebrew-services-command。我自己没有检查过,所以不知道它是否工作以及如何工作。


4
这使我多年来做完全相同的事情积累的bash别名陈旧。好看!
Alex Kestner 2014年

2
@naturalc更新了我的回答以回应您的评论。告诉我是否适合您。
Neara 2015年

1
为我解决了这个问题。谢谢!
龙猫龙猫

对于在那里的所有Rails用户,我都尝试通过通常的Rake命令停止Postgres bundle exec rake pg:stop。但这不起作用,导致了pg_ctl: server does not shut down。解决方法brew services restart postgresql对我有用。👌–
zbeat

谢啦!我不知道这实际上是一个自制程序运行。好东西!
Adrian Grzywaczewski

54

$ brew services list

$ brew services stop postgresql

正在停止postgresql,但可能需要一段时间→成功停止postgresql(标签:homebrew.mxcl.postgresql)


2
尝试停止pg_ctl ... stop但无济于事。一旦我运行brew服务停止了postgresql,我的pg_ctl ... stop现在又可以正常工作了。不知道如何,但是我很高兴这个解决了!
Iggy

我需要添加版本。 brew services stop postgresql@10
Ivor Scott

12

我有一个类似的问题。我忘了几天前我集成了“ lunchy”,并使用它作为launchctl包装器在启动时启动plist ~/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 2014年

12

我遇到了同样的问题...删除启动代理为我解决了这个问题:

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

9

我通过使用命令解决了这个错误

pg_ctl stop -m immediate

pg_ctl start

我不需要这种方式卸载plist。


5
我得到pg_ctl:未指定数据库目录,并且未设置环境变量PGDATA
SuperUberDuper

1
出现相同的错误:未指定数据库目录且未设置环境变量PGDATA
jjj

2
@SuperUberDuper您应该添加-D并指定数据库位置。例如:pg_ctl stop -m即时-D。“。” 代表当前目录,假设您位于数据库目录中
Hatzil

8

原来,我的postgres的brew.plist需要在〜/ Library / LaunchAgents /下卸载和删除。重新启动后一切都很好...结束的问题。


7
请扩大本
SuperUberDuper

7

当依赖brew安装的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"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.