Postgresql启动无监听端口问题的解决
问题在初始化msfdb时报错postgresql无法连接。具体错误如下msf msfdb init[*] exec: msfdb init[i] Database already startedpsql: error: connection to server on socket /var/run/postgresql/.s.PGSQL.5432 failed: No such file or directoryIs the server running locally and accepting connections on that socket?尝试根据报错信息做了如下尝试查看/var/run/postgresql/目录中有没有.s.PGSQL.5432文件确实没有查看权限是postgres的读写执行都有排除权限问题。查看配置文件/etc/postgresql/18/main/postgresql.conflisten_address取消注释也是不行排除配置文件问题因为默认这个配置文件从未改过。使用sudo -u postgres service postgresql restart由postgres服务账号重启服务也是不行排除服务账号的问题。查看配置文件中socket的路径确实是/var/run/postgresql/排除socket默认路径问题。根本原因不断地尝试service stopstart都是显示服务activate已启动但ss -tuln查看仍然没有5432的监听端口。ps aux | grep postgres 也没发现进程。说明问题出在这里。存在一个集群环境且状态为down没有启动。由于没有存活的集群自然就不会有 postgres 进程监听 5432 端口也就不会有 Unix socket 文件。而service postgresql start 的职责是“按配置尝试启动所有已创建的数据库集群”即使某个集群启动失败服务状态也可能显示为 active (exited)因为启动脚本本身执行完成了。相当于PostgreSQL 的“服务壳”启动成功但数据库实例集群并未真正运行。一句话总结PostgreSQL 的总控服务显示启动成功但底层的数据库实例没有运行导致端口和 socket 缺失因而 msfdb 无法连接。解决手动使用 pg_ctlcluster 启动集群后PostgreSQL 真正开始工作问题解决。查看集群正常。查看进程和监听端口正常。查看socket文件已创建。查看具体的数据库实例运行中。让我们不断学习保持好奇和兴趣Iain