Systemd не может запустить Postgresql на Red Hat EL7

На Red Hat EL7 я установил Postgres из стандартного репозитория и инициализировал базу данных обычным способом:

# postgresql-setup initdb

Но когда я пытаюсь запустить службу с:

# systemctl start postgresql.service

Я получаю ошибку:

Job for postgresql.service failed. See 'systemctl status postgresql.service' and 'journalctl -xn' for details.

journalctl -xn дает мне:

Oct 06 14:52:55 myserver systemd[1]: Starting PostgreSQL database server...
-- Subject: Unit postgresql.service has begun with start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit postgresql.service has begun starting up.
Oct 06 14:52:55 myserver systemd[29267]: Failed at step USER spawning /usr/bin/postgresql-check-db-dir: No such process
-- Subject: Process /usr/bin/postgresql-check-db-dir could not be executed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- The process /usr/bin/postgresql-check-db-dir could not be executed and failed.
-- 
-- The error number returned while executing this process is 3.

У кого-нибудь есть идеи?

2 ответа

Я не считаю это полным и правильным решением, но это то, что я бы назвал "сильным обходным путем". Проблема, кажется, начинается с того факта, что эта система Linux может аутентифицироваться как локально, так и через сервер каталогов. Пакет PostgreSQL пытается создать комбо user:group под названием postgres:postgres. Пользователь "postgres" не был создан, поскольку он уже существует на сервере каталогов. Группа "postgres" была создана локально.

Когда systemd запускает Postgres, он превращается в пользователя postgres перед попыткой вызова postgresql-check-db-dir это скрипт, который проверяет, был ли каталог базы данных инициализирован с postgresql-setup initdb, Кажется, что systemd не может перейти к этому пользователю postgres, предоставленному каталогом.

Мой обходной путь состоял в том, чтобы создать нового локального пользователя ("pgsql") и изменить владельца /var/lib/pgsql и /var/run/postgresql для этого нового пользователя, а затем создать собственный файл службы systemd под названием /etc/systemd/system/postgresql.service переопределить значение по умолчанию. Содержимое этого файла:

.include /usr/lib/systemd/system/postgresql.service

[Service]
User=pgsql
Group=postgres

Это позволяет Postgres запускаться и останавливаться systemd.

Для меня журналы говорят вам, что путь БД не существует. Вы уверены, что psql настроен правильно, путь к базе данных существует, и у вас есть разрешение на доступ к нему?

Другие вопросы по тегам