Postgresql

為什麼我的 PostgresQL 11 數據庫集群在通過 systemctl 啟動後會立即關閉?

  • January 13, 2019

我在 Debian 9 上通過 apt-get 安裝了 PostgresQL 11。安裝後,我刪除了預設數據庫集群並刪除了所有自動啟動該集群的服務。我現在已經執行 initdb 在自定義位置初始化一個新集群,並編寫並啟用了 systemd .service 文件來自動執行它。

當機器啟動時,我遇到了服務成功啟動的問題,但隨後數據庫立即關閉,服務立即停止。當我使用 systemctl 手動啟動服務時也會發生同樣的情況。

.服務文件:

[Unit]
Description=PostgreSQL database server
Documentation=man:postgres(1)

[Service]
Environment=PGDATA=/home/(user)/.db
Environment=PGLOG=/home/(user)/postgres.log
Environment=PGSTARTTIMEOUT=270

Type=notify
User=(user)
Group=(group)
ExecStart=/usr/lib/postgresql/11/bin/pg_ctl start -D ${PGDATA} -l ${PGLOG} -t ${PGSTARTTIMEOUT}
ExecStop=/usr/lib/postgresql/11/bin/pg_ctl stop -D ${PGDATA} -m fast
ExecReload=/usr/lib/postgresql/11/bin/pg_ctl reload -D ${PGDATA}
KillMode=mixed
KillSignal=SIGINT
TimeoutSec=300

[Install]
WantedBy=multi-user.target

用於手動啟動集群的命令:

su (user) -c '/usr/lib/postgresql/11/bin/pg_ctl start -D /home/(user)/.db -l /home/(user)/postgres.log -t 270'

通過 systemctl 啟動時的 PostgreSQL 日誌:

2019-01-13 11:36:16.506 東

$$ 1469 $$LOG:監聽 IPv4 地址“127.0.0.1”,埠 5432 2019-01-13 11:36:16.508 東

$$ 1469 $$日誌:監聽 Unix 套接字“/var/run/postgresql/.s.PGSQL.5432” 2019-01-13 11:36:16.530 EST

$$ 1470 $$LOG:數據庫系統在 2019 年 01-13 11:17:07 EST 關閉 2019-01-13 11:36:16.537 東

$$ 1469 $$LOG:數據庫系統已準備好接受連接 2019-01-13 11:36:16.595 東

$$ 1469 $$LOG:收到快速關機請求 2019-01-13 11:36:16.600 EST

$$ 1469 $$LOG:中止任何活動事務 2019-01-13 11:36:16.605 東

$$ 1469 $$LOG:後台工作人員“邏輯複製啟動器”(PID 1476)以退出程式碼 1 退出 2019-01-13 11:36:16.605 東

$$ 1471 $$日誌:關閉 2019-01-13 11:36:16.625 東

$$ 1469 $$LOG:數據庫系統已關閉

雜誌 | grep postgres:

1月13日 11:42:01 vps76296 systemd

$$ 1 $$: 正在啟動 PostgreSQL 數據庫伺服器… 1月13日 11:42:01 vps76296 systemd

$$ 1 $$: 正在啟動 PostgreSQL RDBMS… 1月13日 11:42:02 vps76296 systemd

$$ 1 $$: 啟動 PostgreSQL RDBMS。 1月13日 11:42:02 vps76296 systemd

$$ 1 $$:postgres-start.service:收到來自 PID 749 的通知消息,但僅允許主 PID 729 接收 1月13日 11:42:02 vps76296 pg_ctl

$$ 729 $$: 等待伺服器啟動….完成 1月13日 11:42:02 vps76296 pg_ctl

$$ 729 $$: 伺服器啟動 1月13日 11:42:02 vps76296 pg_ctl

$$ 761 $$: 等待伺服器關閉….完成 1月13日 11:42:02 vps76296 pg_ctl

$$ 761 $$: 伺服器停止 1月13日 11:42:02 vps76296 systemd

$$ 1 $$: 啟動 PostgreSQL 數據庫伺服器。

strace 日誌也可應要求提供。它真的很長,所以除非需要,否則我選擇不包含它。

為什麼我的服務在啟動後立即停止?

Type=notify讓我在這裡懷疑。根據systemd 文件:“……類似於 exec;但是,預計該服務通過sd_notify(3)……發送通知消息”

並且pg_ctl不是守護程序本身,而是它的控制實用程序,而不是立即退出。

我建議使用不同的Type- oneshot

還要注意systemctl status …serviceName…輸出——它可能有解釋。

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