Сервер PostgreSQL не зупиняється


87

Маючи невелику проблему з 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і так, все, що я отримую, це "Сервер не вимикається"
Паркер Хатчінсон,

Я це здогадався, але швидкий погляд на postgres --helpне відразу показав прапор «м».
bma

brew reinstall postgresql stackoverflow.com/a/39781473/6086226 працював на мене
Дерк Ян

Відповіді:


161

Якщо б такий же питання, 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на Mac.

Ось як я "повернувся" 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
Це застаріває стільки псевдонімів, які я накопичив за ці роки, роблячи абсолютно те саме. Добре виглядати!
Алекс Кестнер,

2
@naturalc оновив мою відповідь у відповідь на ваш коментар. скажіть, чи добре у вас це працює.
Неара

1
Вирішив проблему для мене. Дякую!
TotoroTotoro

Для будь-якого Рейки користувачів там, я намагаюся стопорні Postgres з допомогою звичайної команди Rake, bundle exec rake pg:stop. Але це не спрацювало, що призвело до pg_ctl: server does not shut down. Обхідний шлях brew services restart postgresqlспрацював для мене. 👌
zbeat

Дякую, чоловіче! Я ніяк не міг зрозуміти, що це насправді була доморощена служба. Хороший!
Адріан zyживачевський

54

$ brew services list

$ brew services stop postgresql

Зупинка postgresql, але це може зайняти деякий час → Успішно зупинено postgresql(мітка: homebrew.mxcl.postgresql)


2
Спробував зупинитись pg_ctl ... stopбезрезультатно. Як тільки я запустив служби заварювання stop postgresql, мій pg_ctl ... stop працює знову, як очікувалося. Не знаю, як, але я радий, що це вирішило!
Іггі

Мені потрібно було додати версію з ним. brew services stop postgresql@10
Івор Скотт,

12

У мене була подібна проблема. Я забув, що кілька днів тому інтегрував "ланч" і використовував його як обгортку 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>

Спроба безпосередньо вбити процес не спрацювала, тому що мені потрібно було вивантажити список.

    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

9

Я обійшов цю помилку за допомогою команди

pg_ctl stop -m immediate

pg_ctl start

Мені не потрібно було розвантажувати цей список.


5
Я отримую pg_ctl: каталог баз даних не вказано, а змінну середовища PGDATA
вимкнено

1
отримання тієї ж помилки: не вказано каталог бази даних та не
змінено

2
@SuperUberDuper Вам слід додати -D та вказати розташування db. Наприклад: pg_ctl stop -m негайно -D. "." означає поточний каталог, якщо припустити, що ви знаходитесь у каталозі бази даних
Хаціл

8

виявляється, що мій brew.plist для postgres потрібно було вивантажити та видалити за адресою ~ / Library / LaunchAgents /. Після перезапуску все добре ... заключне питання.


7
будь ласка, розширте це
SuperUberDuper

7

Покладаючись на встановлений у Brew PostgreSQL, наступна команда працювала для його вимкнення.

> brew services stop postgresql

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

Як згадувалося в іншій відповіді, перегортання списку процесів, а потім вбивство будь-чого, пов’язаного з 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"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.