Debian

為什麼 /usr/lib/systemd/system/ 中的 systemd 單元文件仍然適用於 Ubuntu?

  • March 24, 2019

我了解systemd不同版本的 Linux 將單元文件儲存在不同位置。在 RHEL 上,它位於 . /usr/lib/systemd/system/,而在基於 Debian 的機器上,它位於/lib/systemd/system/.

但是,在我的 Ubuntu 18.04 機器上,我只是使用一個文件安裝了 Elasticsearch ,.deb它的systemd單元文件安裝在./usr/lib/systemd/system/``systemd

$ uname -a
Linux nucleolus 4.15.0-46-generic #49-Ubuntu SMP Wed Feb 6 09:33:07 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

$ sudo systemctl status elasticsearch.service
● elasticsearch.service - Elasticsearch
  Loaded: loaded (/usr/lib/systemd/system/elasticsearch.service; disabled; vendor preset: enabled)
  Active: inactive (dead)
    Docs: http://www.elastic.co

注意路徑是**/usr/lib/systemd/system/**elasticsearch.service.

那麼為什麼一個systemd單元文件/usr/lib/systemd/system/仍然適用於 Ubuntu?Debian/Ubuntu 系統的真實單元文件載入路徑是什麼?

systemd查找單元文件的路徑是從中讀取的,UnitPath並且可以使用systemctl.

# systemctl --no-pager --property=UnitPath show | tr ' ' '\n'
UnitPath=/etc/systemd/system.control
/run/systemd/system.control
/run/systemd/transient
/etc/systemd/system
/run/systemd/system
/run/systemd/generator
/lib/systemd/system
/run/systemd/generator.late

如您所見,這不包括/usr/lib/systemd/systemUbuntu 18.04 系統上的輸出。是在執行時生成的UnitPath,此處僅顯示實際存在的目錄。

# mkdir -p /usr/lib/systemd/system
# systemctl daemon-reload
# systemctl --no-pager --property=UnitPath show | tr ' ' '\n' | grep "/usr/lib/systemd/system"
/usr/lib/systemd/system

因此,創建目錄就足以添加/usr/lib/systemd/systemUnitPath,這很可能是通過安裝 Elasticsearch 完成的。


構造時考慮了哪些目錄UnitPath可以用和pkg-config變數查詢。systemdsystemunitdir``systemdsystemunitpath

# pkg-config systemd --variable=systemdsystemunitdir 
/lib/systemd/system

# pkg-config systemd --variable=systemdsystemunitpath | tr ':' '\n'
/etc/systemd/system
/etc/systemd/system
/run/systemd/system
/usr/local/lib/systemd/system
/lib/systemd/system
/usr/lib/systemd/system
/lib/systemd/system

src/core/systemd.pc.in如下systemdsystemunitpath

systemdsystemunitpath=${systemdsystemconfdir}:/etc/systemd/system:/run/systemd/system:/usr/local/lib/systemd/system:${systemdsystemunitdir}:/usr/lib/systemd/system:/lib/systemd/system

引用自:https://unix.stackexchange.com/questions/508226