為什麼我的 PostgresQL 11 數據庫集群在通過 systemctl 啟動後會立即關閉?
我在 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…
輸出——它可能有解釋。