为什么 `/usr/lib/systemd/system/` 中的 systemd 单元文件仍然适用于 Ubuntu?

为什么 `/usr/lib/systemd/system/` 中的 systemd 单元文件仍然适用于 Ubuntu?

据我所知,systemd不同版本的 Linux 的单元文件存储在不同的位置。在 RHEL 上,它位于/usr/lib/systemd/system/,而在基于 Debian 的计算机上,它位于/lib/systemd/system/

然而,在我的 Ubuntu 18.04 机器上,我刚刚使用.deb文件安装了 Elasticsearch,其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单位文件 at/usr/lib/systemd/system/仍然适用于 Ubuntu?是什么真实的Debian/Ubuntu 系统的单元文件加载路径?

答案1

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

相关内容