我正试图在一台机器上建立一个PostgreSQL 9.6的新实例。我在另一台机器上测试过,它在那台机器上运行良好。但同样的过程并不适用于新机器。下面是我使用的步骤
用下面的命令创建了一个新的数据目录
/opt/rh/rh-postgresql96/root/bin/initdb -D /var/lib/pgsql/9.6/data/
创建了一个包含以下内容的服务文件
.include /lib/systemd/system/rh-postgresql96-postgresql.service
[Service]
Environment=PGDATA=/var/lib/pgsql/9.6/data/
Environment=PGPORT=5433
User=postgres
Group=root
使用命令注册服务
/etc/systemd/system/rh-postgresql96-inst2.service
现在使用命令
systemctl enable rh-postgresql96-inst2
启动服务。所有这些步骤在一台机器上运行良好,但在第二台机器上运行不正常。
在第二台机器上启动服务时出现以下错误
rh-postgresql96-inst2.service - PostgreSQL database server
Loaded: loaded (/etc/systemd/system/rh-postgresql96-inst2.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Mon 2018-06-18 09:59:01 UTC; 10s ago
Process: 7552 ExecStart=/opt/rh/rh-postgresql96/root/usr/libexec/postgresql-ctl start -D ${PGDATA} -s -w -t ${PGSTARTTIMEOUT} (code=exited, status=1/FAILURE)
Process: 7550 ExecStartPre=/opt/rh/rh-postgresql96/root/usr/libexec/postgresql-check-db-dir %N (code=exited, status=0/SUCCESS)
HINT: Is another postmaster already running on port 5433? If not, wait a few seconds and retry.
LOG: could not bind IPv4 socket: Permission denied
HINT: Is another postmaster already running on port 5433? If not, wait a few seconds and retry.
WARNING: could not create listen socket for "localhost"
FATAL: could not create any TCP/IP sockets
LOG: database system is shut down
systemd[1]: rh-postgresql96-inst2.service: control process exited, code=exited status=1
systemd[1]: Failed to start PostgreSQL database server.
systemd[1]: Unit rh-postgresql96-inst2.service entered failed state.
systemd[1]: rh-postgresql96-inst2.service failed.
但是,我可以使用
systemctl start rh-postgresql96-inst2
启动服务。另外,我已经用netstat,lsof命令检查了是否有其他postgresql实例正在端口5433上运行,但事实并非如此。
事实上我也试过54315434个端口,但服务器没有启动
最佳答案
这个问题与SELinux有关。
当我在两台机器上运行commandsestatus
时,输出略有不同。
一台服务器Current mode: permissive
,另一台服务器Current mode: enforcing
。
因此,我在第二台机器上使用命令setenforce 0
将当前模式更改为“允许”。
解决了权限相关的问题。现在我可以启动第二个实例了。