Systemd无法在Red Hat EL7上启动Postgresql

时间:2015-10-06 22:21:11

标签: postgresql redhat systemd

在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 个答案:

答案 0 :(得分:2)

我不认为这是一个完整和正确的解决方案,但这就是我所说的“强大的解决方法”。这个问题似乎始于这个Linux系统可以在本地以及通过目录服务器进行身份验证。 PostgreSQL包试图创建一个用户:group combo,名为postgres:postgres。未创建用户“postgres”,因为它已存在于目录服务器中。 “postgres”小组是在当地创建的。

当systemd启动Postgres时,它会在尝试调用postgresql-check-db-dir之前更改为postgres用户,这是一个检查数据库目录是否已使用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启动和停止。

答案 1 :(得分:0)

对我来说,日志告诉你db路径不存在。您确定psql配置正确,数据库路径是否存在且您是否有权访问它?