依賴後重啟 Systemd 單元
我有一個由
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/ 目錄來在單元配置文件之外進行配置。有關詳細資訊,請參見上文。