Використання postgres з launchd без постійних питань


3

У мене є postgres і пасажир встановлений з доморощеного, і використовувати OS X вбудований в Apache. У мене є кілька рейок програми, які використовують postgres, якими керує пасажир, який у свою чергу управляється apache.

Наразі Apache запускається запуск launchd з /System/Library/LaunchDaemons/org.apache.httpd.plist, apache починає пасажир через /etc/apache2/other/passenger.conf і після того, як я увійшов до системи, postgres запускається через ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist.

Все починається відмінно і працює відмінно, поки мені потрібно закрити або перезавантажити мій Mac; тоді я стикаюся з проблемою, як запускає все. В основному Launchd надсилає SIGTERM кожному користувальницькому процесу, а потім через 20 секунд ( http://www.opensource.apple.com/source/launchd/launchd-842.92.1/src/core.c ) надсилає SIGKILL, але postgres розглядає SIGTERM як сигнал "розумного вимкнення" ( http://www.postgresql.org/docs/9.5/static/server-shutdown.html ) і чекає, поки всі існуючі сесії закриються перед виходом. Проблема полягає в тому, що сесії належать до рельсових додатків, що працюють під пасажиром, і тому не вимикаються, поки апач не вимкнеться. А Apache не вимикається, поки система не вимикається. Що означає postgres отримує SIGKILL і залишає його postmaster.pid Файл, що лежить навколо, що запобігає запуску postgres до наступного завантаження, поки я rm цей файл.

Був би переміщення postgres's launchd пластик /Library/LaunchDaemons/ бути кращою ідеєю? Це потенційно призведе до того, що postgres та apache будуть вимикатися одночасно, що дає 20 секунд, щоб зупинитися, має бути достатньо часу для postgres вийти чисто. Але я міг би пропустити простіше рішення.


Скільки часу потрібно для того, щоб postgres вимкнувся, якщо ви зробите це, залишивши всі інші процеси запущеними? Це 20 секунд на здогад або щось досить надійне для тієї частини головоломки?
bmike

postgres ніколи не вимикається, якщо я просто надішлю його SIGTERM і залишимо всі інші процеси однаковими. Я пробував що вчора та лишав це протягом над годиною без прогресу, але другий я перезавантажив apache тоді postgres shutdown b / c весь клієнтів закрив.
Camden Narzt

20 секунд - це те, наскільки довго запуску запуску за замовчуванням перед надсиланням SIGKILL, але це можна налаштувати.
Camden Narzt

Відповіді:


0

Я перемістив postgres launchd plist до / Library / LaunchDaemons і додав пару ключів / значень UserName (postgres не буде працювати як root).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.