Ubuntu
在 Ubuntu Server 16 上設置網路後,如何強制 PostgreSQL 啟動?
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