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 настроен правильно, путь к базе данных существует, и у вас есть разрешение на доступ к нему?