Debian為什麼
為什麼 /usr/lib/systemd/system/
中的 systemd 單元文件仍然適用於 Ubuntu?
我了解
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/system
Ubuntu 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/system
到UnitPath
,這很可能是通過安裝 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