
我正在為 postgresql 資料庫開發一個 systemd 關閉腳本(單元文件),我按照以下兩篇文章進行操作,但無法讓它工作。
這是我對 postgresql 安裝所做的事情:我編寫了一個啟動腳本,該腳本在啟動時啟動 postgresql 資料庫集群,但下面顯示的關閉腳本似乎在關閉時不起作用。如果我用 systemctl start service_name 執行它,它就可以正常工作。
當我查看資料庫日誌時,我可以看到一條訊息“LOG:收到智慧關閉請求”,這是資料庫叢集在正常模式下關閉時的訊息,這就是當我使用“關閉主機”時關閉作業系統所做的操作立即關閉-h」。我想看到的是“LOG:收到快速關閉請求”,這是當我使用 systemctl start service_name 運行腳本時發生的快速(立即模式)關閉
這是單元文件定義
[Unit]
Description=Database Shutdown
Before=shutdown.target reboot.target halt.target
DefaultDependencies=no
[Service]
ExecStart=/usr/bin/su - postgres -c "/opt/postgres-95/bin/pg_ctl -D /database/inst1/data -w stop &"
Type=oneshot
RemainAfterExit=yes
[Install]
WantedBy=shutdown.target
我還嘗試放棄該[Install]
部分,但 systemctl 不允許我在沒有該[Install]
部分的情況下啟用該服務。有人可以指出我正確的方向嗎?
答案1
systemd
旨在乾淨地處理這種情況。您可以透過建立一個小檔案來指定要在停止 PostgreSQL 服務時執行的命令來實現此目的。首先,建立一個目錄,名稱為:
/etc/systemd/system/postgresql.d/
在其中建立一個以 結尾的任何名稱的文件.conf
,例如custom-shutdown.conf
.向該文件添加幾行,如下所示:
[Service]
ExecStop=/usr/bin/su - postgres -c "/opt/postgres-95/bin/pg_ctl -D /database/inst1/data -w stop &"
您可能希望ExecStopPost=
根據您的情況使用。