시스템 단위 파일을 배치할 수 있는 위치는 다양합니다. 서비스 이름만 주어지면 systemd에게 서비스 선언을 어디에서 읽는지 물어볼 수 있는 빠르고 쉬운 방법이 있습니까?
답변1
실제 정적 파일에 정의된 단위의 경우 다음에서 확인할 수 있습니다 systemctl status
.
$ systemctl status halt-local.service
● halt-local.service - /usr/sbin/halt.local Compatibility
Loaded: loaded (/lib/systemd/system/halt-local.service; static)
Active: inactive (dead)
그러나 파일로 정의되지 않은 단위(예: 설치됨)가 있습니다 systemd-cron
. 다음과 같은 유용한 위치가 나열되어 있지 않습니다 status
.
$ systemctl status cron-jojo-0.timer
● cron-jojo-0.timer - [Cron] "*/10 * * * * ..."
Loaded: loaded (/var/spool/cron/crontabs/jojo)
Active: active (waiting) since Mon 2015-05-18 14:53:01 UTC; 9min ago
두 경우 모두 FragmentPath
현장에서는 다음과 같은 내용을 교육하고 있습니다.
$ systemctl show -P FragmentPath cron-daily.service
/lib/systemd/system/cron-daily.service
$ systemctl show -P FragmentPath cron-jojo-0.service
/run/systemd/generator/cron-jojo-0.service
$ systemctl show -P FragmentPath halt-local.service
/lib/systemd/system/halt-local.service
답변2
systemd 장치를 cat할 수 있습니다. 파일 위치가 주석으로 표시됩니다. 보너스: 재정의도 표시됩니다.
systemctl cat sssd
# /lib/systemd/system/sssd.service
[Unit]
...
# /etc/systemd/system/sssd.service.d/override.conf
[Unit]
...
답변3
아래는 여러 파일 위치를 제공합니다
show
-- 하나 이상의 단위/작업 또는 관리자의 속성을 표시합니다.
-p
--property=NAME
이 이름의 속성만 표시
$ systemctl show -p FragmentPath {accounts-daemon,ntp,sshd}
FragmentPath=/lib/systemd/system/accounts-daemon.service
FragmentPath=/lib/systemd/system/ntp.service
FragmentPath=/lib/systemd/system/ssh.service
답변4
다음과 같이 할 수 있습니다(예를 들어 nullmailer를 사용하여):
systemctl show nullmailer | grep FragmentPath | awk -F'=' '{print $2}'
그러면 다음과 같은 결과가 생성됩니다.
/lib/systemd/system/nullmailer.service
그런 다음 서비스 파일 내용을 보려면 다음을 수행할 수 있습니다.
cat $(systemctl show nullmailer | grep FragmentPath | awk -F'=' '{print $2}')
그러면 다음과 같은 결과가 생성됩니다.
[Unit]
Description=nullmailer
[Unit]
Description=Nullmailer relay-only MTA
... stuff omitted for brevity ...
[Install]
WantedBy=multi-user.target
도움이 되길 바랍니다.
추신. 저는 일반적으로 편의를 위해 해당 명령을 별칭 파일에 넣습니다.
추신. Joaquin이 언급했듯이, 제가 사용/언급했던 grep|awk 콤보를 사용하는 대신 -P 플래그를 사용할 수 있습니다.
systemctl show nullmailer -P FragmentPath