SystemdDoctor
мешает работе postgresql мониторинг частое

postgresql.service активен, а кластер не работает

В Debian и Ubuntu postgresql.service — это обёртка без процессов: Type=oneshot с RemainAfterExit=yes. Она остаётся в состоянии active даже когда кластер упал. Настоящее состояние смотрят у unit экземпляра.

Вероятные причины

По порядку: сверху то, что встречается чаще.

  1. Мониторинг проверяет обёртку вместо кластера

    Обёртка отрабатывает за миллисекунды и остаётся активной до перезагрузки. Проверка «служба active» всегда успешна и бесполезна.

  2. Кластеров несколько, а проверяется один

    На машине может быть несколько версий PostgreSQL, и у каждой свой unit экземпляра. Состояние одного ничего не говорит об остальных.

  3. Команды выполняются над обёрткой

    Перезапуск обёртки поднимает все кластеры, но её состояние по-прежнему ничего не покажет. Журнал у обёртки тоже пустой.

Диагностика

Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.

Список кластеров с версией, портом и состоянием — самый быстрый ответ.

pg_lsclusters

Все связанные unit: обёртка и экземпляры.

systemctl list-units "postgresql*" --all --no-pager

Отвечает ли база на самом деле.

pg_isready -h 127.0.0.1 -p 5432

Решение

Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.

1. Мониторинг проверяет обёртку вместо кластера
Почему происходит
Обёртка отрабатывает за миллисекунды и остаётся активной до перезагрузки. Проверка «служба active» всегда успешна и бесполезна.
Как проверить
Посмотрите состояния обоих unit рядом.
systemctl status postgresql --no-pager | head -6
systemctl status postgresql@16-main --no-pager | head -8
Как исправить
В мониторинге проверяйте unit экземпляра (postgresql@16-main.service) или отвечает ли база на запрос. Обёртка для этого не годится.
pg_isready -h 127.0.0.1 -p 5432
2. Кластеров несколько, а проверяется один
Почему происходит
На машине может быть несколько версий PostgreSQL, и у каждой свой unit экземпляра. Состояние одного ничего не говорит об остальных.
Как проверить
Посмотрите все кластеры и их состояния.
pg_lsclusters
systemctl list-units "postgresql@*" --all --no-pager
Как исправить
Проверяйте каждый кластер отдельно: у каждого свой порт, свой каталог данных и свой журнал. Обёртка объединяет их только для удобства запуска.
3. Команды выполняются над обёрткой
Почему происходит
Перезапуск обёртки поднимает все кластеры, но её состояние по-прежнему ничего не покажет. Журнал у обёртки тоже пустой.
Как проверить
Посмотрите, какие кластеры есть на машине.
pg_lsclusters
systemctl list-units "postgresql*" --all --no-pager
Как исправить
Обращайтесь к unit экземпляра: его журнал содержит сообщения сервера, а состояние отражает реальность.

Пример вывода

Обёртка активна, кластер упал. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.

● postgresql.service - PostgreSQL RDBMS
     Loaded: loaded (/lib/systemd/system/postgresql.service; enabled)
     Active: active (exited) since Mon 2026-09-15 08:00:02 MSK; 6h ago

× postgresql@16-main.service - PostgreSQL Cluster 16-main
     Active: failed (Result: exit-code) since Mon 2026-09-15 14:02:11 MSK; 10min ago

Связанные ошибки

Где встречается чаще всего

Источники

  • Документация Debian по PostgreSQL: несколько кластеров документация программы
    сверено 15 сентября 2026
  • systemd.service(5)
    Type=oneshot и RemainAfterExit=.
    официальная документация, systemd 255
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Проверено на PostgreSQL 16 в Ubuntu 24.04: обёртка остаётся active при упавшем кластере.
    собственная проверка, systemd 255
    сверено 15 сентября 2026