在關閉之前啟動 systemd 服務

在關閉之前啟動 systemd 服務

我正在為 postgresql 資料庫開發一個 systemd 關閉腳本(單元文件),我按照以下兩篇文章進行操作,但無法讓它工作。

如何在關機前使用 systemd 執行腳本?

https://superuser.com/questions/1016827/how-do-i-run-a-script-before-everything-else-on-shutdown-with-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=根據您的情況使用。

請參閱官方文檔擴充預設配置以及官方文檔ExecStop=ExecStopPost=

相關內容