override.conf 檔案是否更改了實際的服務文件conf?

override.conf 檔案是否更改了實際的服務文件conf?

我已經創建了一個override.conf文件systemd-journal-catalog-update.service並將其放置在systemd-journal-catalog-update.service.d/目錄中。其目的是systemd-tmpfiles-setup.servicesystemd-journal-catalog-update.service file.

該文件現在包含以下內容:

[Unit]
After=local-fs.target systemd-tmpfiles-setup.service

我的override.conf文件有這個:

[Unit]
After=
After=local-fs.target

但是,該systemd-journal-catalog-update.service文件似乎沒有改變。我是否誤解了該override.conf文件的工作原理?我知道我可以手動修改原始服務文件,但專案情況限制了這種選擇。非常感謝你們提供的任何幫助/建議。

答案1

根據系統單元手冊頁:

依賴項(After= 等)無法重設為空列表,因此只能在 drop-ins 中新增依賴項。如果要刪除依賴項,則必須覆蓋整個單元。

可以透過遵循手冊頁中的範例二來覆蓋整個單元檔案:

有兩種方法可以覆蓋單元檔案中的供應商設定:將單元檔案從 /usr/lib/systemd/system 複製到 /etc/systemd/system 並修改所選設定。 [...]第一種方法的優點是可以輕鬆覆蓋整個單元,不再解析供應商單元。它的缺點是供應商對單元文件的改進不會自動合併到更新中。

就您而言,您必須(作為 root)

  • cp /usr/lib/systemd/system/systemd-journal-catalog-update.service /etc/systemd/system
  • systemctl daemon-reload
  • systemctl restart systemd-journal-catalog-update

之後,systemctl status將指向以下位置的服務文件/etc

# systemctl status systemd-journal-catalog-update
● systemd-journal-catalog-update.service - Rebuild Journal Catalog
     Loaded: loaded (/etc/systemd/system/systemd-journal-catalog-update.service; static)
     Active: active (exited) since Sat 2021-05-22 16:27:07 CEST; 3 weeks 2 days ago
[...]

上述內容systemctl cat也不會顯示以下文件/etc/

# systemctl cat systemd-journal-catalog-update
# /etc/systemd/system/systemd-journal-catalog-update.service
#  SPDX-License-Identifier: LGPL-2.1-or-later
#
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

[Unit]
Description=Rebuild Journal Catalog
[...]

/etc現在您可以根據需要編輯該文件,systemctl daemon-reload再次運行並systemctl restart systemd-journal-catalog-update使用自訂單元文件及其設定來運行該服務。

請注意手冊頁中提到的以下內容:

它的缺點是供應商對單元文件的改進不會自動合併到更新中。

由於 systemd 現在讀取的單元檔案與您的發行版的 systemd 套件中的單元檔案完全不同,因此您必須手動將檔案中的任何更新套用/usr/lib到您自己的副本中。.rpmnew(來自基於 RPM 的發行版)或.pacnew(來自基於 pacman 的發行版)如果套件管理器追蹤的設定檔已被本機管理員修改,則通常會產生文件,並且在這種情況下不會產生套件。

相關內容