`/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

관련 정보