내가 아는 한, 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-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