web-dev-qa-db-ja.com

`/ 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であることに注意してください。

では、なぜ/usr/lib/systemd/system/systemdユニットファイルがUbuntuでも機能するのでしょうか。 Debian/Ubuntuシステムのrealユニットファイルのロードパスは何ですか?

3
dayuloli

ユニットファイルを検索するパスsystemdUnitPathから読み取られ、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

ご覧のとおり、これにはUbuntu18.04システムでの出力である/usr/lib/systemd/systemは含まれていません。 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
5
Thomas