`/usr/lib/systemd/system/`のシステム単位ファイルがUbuntuでまだ機能しているのはなぜですか?

`/usr/lib/systemd/system/`のシステム単位ファイルが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ユニットファイルが/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/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-configsystemdsystemunitdirsystemdsystemunitpath

# 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

おすすめ記事