PostgreSQL 无法绑定套接字,因为它在网络设置之前启动。
我使用 Ubuntu Server 16.04.1 LTS 和 PostgreSQL 9.5。我在网上读了很多文档,但都不能解决我的问题。
我很确定问题是:PostgreSQL 服务在网络接口正确设置之前尝试创建套接字。
sudo systemctl status [email protected]
● [email protected] - PostgreSQL Cluster 9.5-main
Loaded: loaded (/lib/systemd/system/[email protected]; disabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Wed 2016-07-27 09:42:36 UTC; 1min 43s ago
Process: 5274 ExecStart=postgresql@%i --skip-systemctl-redirect %i start (code=exited, status=1/FAILURE)
Jul 27 09:42:34 airpy-server systemd[1]: Starting PostgreSQL Cluster 9.5-main...
Jul 27 09:42:36 airpy-server [email protected][5274]: The PostgreSQL server failed to start. Please check the log outp
Jul 27 09:42:36 airpy-server [email protected][5274]: 2016-07-27 09:42:36 UTC [5332-1] LOG: could not bind IPv4 socke
Jul 27 09:42:36 airpy-server [email protected][5274]: 2016-07-27 09:42:36 UTC [5332-2] HINT: Is another postmaster al
Jul 27 09:42:36 airpy-server [email protected][5274]: 2016-07-27 09:42:36 UTC [5332-3] WARNING: could not create list
Jul 27 09:42:36 airpy-server [email protected][5274]: 2016-07-27 09:42:36 UTC [5332-4] FATAL: could not create any TC
Jul 27 09:42:36 airpy-server systemd[1]: [email protected]: Control process exited, code=exited status=1
Jul 27 09:42:36 airpy-server systemd[1]: Failed to start PostgreSQL Cluster 9.5-main.
Jul 27 09:42:36 airpy-server systemd[1]: [email protected]: Unit entered failed state.
Jul 27 09:42:36 airpy-server systemd[1]: [email protected]: Failed with result 'exit-code'.
我必须使用 DHCP(我无法更改它)和固定租约。由于我已将设置设置为listen_address='fixed_ip'
集群postgresql.conf
不会在启动时启动。这就是一切的开始方式...
我浪费了两天时间尝试让 postgreSQL 等待网络配置,但没有成功。它在 Ubuntu Server 14.04 上运行良好(我无需配置),但现在它无法在新的 LTS 版本上运行。
我至少尝试过这些方法:
在 Ubuntu Server 16 上设置网络后,如何强制启动 PostgreSQL?
感谢您的帮助
答案1
使用新的systemctl
服务管理器,您可以强制服务等待网络处于活动状态,直到启动。这可以通过编辑服务单元文件(查看)并在部分/etc/systemd/system/
中添加以下行来实现:unit
[Unit]
Wants=network-online.target
After=network-online.target
然后使用新配置重新加载服务:
systemctl reload name.service
重新启动系统以检查其是否在启动服务之前等待网络。
答案2
在服务文件中,(/etc/init.d/<service>)
您可以指定 PostGre 必须启动哪个服务。它会像这样:
#! /bin/sh
### BEGIN INIT INFO
# Provides: sshd
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop:
# Short-Description: OpenBSD Secure Shell server
### END INIT INFO
在必需启动中,您可以指定networking