在 Ubuntu Server 16 上设置网络后,如何强制启动 PostgreSQL?

在 Ubuntu Server 16 上设置网络后,如何强制启动 PostgreSQL?

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 论坛,它消除了另一个错误(正在运行启动作业以提升网络接口......)
  • 网络目标,它添加了其他错误,而我的问题仍然存在。

在 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

相关内容