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ユニットファイルのロードパスは何ですか?
ユニットファイルを検索するパス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
ご覧のとおり、これには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/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