Systemd

依賴後重啟 Systemd 單元

  • February 13, 2018

我有一個由systemd. 它使用 Postgresql 作為數據庫,所以它依賴它。這是我的網路應用程序的單元文件(我刪除了不相關/敏感的部分):

[Unit]
Description=xxxx
Requires=postgresql.service
After=network.target postgresql.service

[Service]
Type=simple
PermissionsStartOnly=true
SyslogIdentifier=xx-service
User=yyy
Group=zzz
ExecStart=/opt/.../xx
WorkingDirectory=/opt/xx
StandardOutput=journal+console

[Install]
WantedBy=multi-user.target

主機作業系統是 Ubuntu 伺服器 16.04。

我最近發生了一個事件,當我早上回到工作崗位時,Web 應用程序沒有執行。檢查日誌後,我發現該服務已停止,systemd因為postgresql有更新。顯然在升級之前aptitude停止postgresql並在更新後重新啟動它。當我登錄機器時,它正在執行。

但是systemd決定在停止之前停止我的網路應用程序postgresql,這很好,但是在重新啟動後沒有重新啟動網路應用程序postgresql

服務重啟後如何指示systemd重啟應用postgresql

我想你正在尋找PartOf

PartOf= 配置與 Requires= 類似的依賴項,但僅限於停止和重新啟動單元。當 systemd 停止或重新啟動此處列出的單元時,該操作將傳播到該單元。請注意,這是一種單向依賴——對此單元的更改不會影響列出的單元。

當在 a.service 上使用 PartOf=b.service 時,此依賴關係將在 b.service 的屬性列表中顯示為 ConsistsOf=a.service。ConsistsOf= 依賴項不能直接指定。

添加PartOf=postgresql.service到您的 Web 應用程序的單元文件中,重新載入systemctl-daemon並測試。

為了解決您的 Web 應用程序在啟動後必須自動postgresql.service啟動的情況,您可以結合PartOf,Wants但在postgresql的單元文件中:

Wants= 弱版本的 Requires=。如果配置單元是,則將啟動此選項中列出的單元。但是,如果列出的單位未能啟動或無法添加到交易中,這對整個交易的有效性沒有影響。這是將一個單元的啟動與另一單元的啟動掛鉤的推薦方法。

請注意,這種類型的依賴關係也可以通過將符號連結添加到單元文件隨附的 .wants/ 目錄來在單元配置文件之外進行配置。有關詳細資訊,請參見上文。

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