Ubuntu

在 Ubuntu Server 16 上設置網路後,如何強制 PostgreSQL 啟動?

  • September 19, 2017

PostgreSQL 無法綁定套接字,因為它在網路設置之前啟動。

我使用 Ubuntu Server 16.04.1 LTS 和 PostgreSQL 9.5。我在網際網路上閱讀了許多文件,但沒有解決我的問題。

我很確定問題是:PostgreSQL 服務嘗試在正確設置網路介面之前創建一個套接字。

sudo systemctl status postgresql@9.5-main.service
● postgresql@9.5-main.service - PostgreSQL Cluster 9.5-main
  Loaded: loaded (/lib/systemd/system/postgresql@.service; 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 postgresql@9.5-main[5274]: The PostgreSQL server failed to start. Please check the log outp
Jul 27 09:42:36 airpy-server postgresql@9.5-main[5274]: 2016-07-27 09:42:36 UTC [5332-1] LOG:  could not bind IPv4 socke
Jul 27 09:42:36 airpy-server postgresql@9.5-main[5274]: 2016-07-27 09:42:36 UTC [5332-2] HINT:  Is another postmaster al
Jul 27 09:42:36 airpy-server postgresql@9.5-main[5274]: 2016-07-27 09:42:36 UTC [5332-3] WARNING:  could not create list
Jul 27 09:42:36 airpy-server postgresql@9.5-main[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]: postgresql@9.5-main.service: 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]: postgresql@9.5-main.service: Unit entered failed state.
Jul 27 09:42:36 airpy-server systemd[1]: postgresql@9.5-main.service: Failed with result 'exit-code'.

我必須使用具有固定租約的 DHCP(我無法更改它)。由於我已將集群設置listen_address='fixed_ip'postgresql.conf不會在啟動時啟動。一切就這樣開始了……

而且我浪費了兩天時間試圖讓 postgreSQL 等待網路配置但沒有成功。它在 Ubuntu Server 14.04 上執行起來就像一個魅力(我沒有什麼可配置的),現在它不適用於新的 LTS 版本。

我至少嘗試過這些線索:

  • Ubuntu-Forum,它刪除了另一個錯誤(啟動作業正在執行以提高網路介面…)
  • NetworkTarget,它添加了其他錯誤我的問題仍然存在。

在 Ubuntu Server 16 上設置網路後,如何強制 PostgreSQL 啟動?

感謝您的幫助

使用新的systemctl服務管理器,您可以強制服務等待網路處於活動狀態,直到它啟動。這是通過編輯服務單元文件(查看/etc/systemd/system/)並在部分中添加以下行來實現的unit

[Unit]

Wants=network-online.target
After=network-online.target

然後使用新配置重新載入服務:

systemctl reload name.service

重新啟動系統以檢查它在開始服務之前等待網路。

在服務文件(/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

在Required-start中你可以指定networking

引用自:https://serverfault.com/questions/792211