systemd 單元檔案可以放置在許多不同的位置。有沒有一種快速、簡單的方法來詢問 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
你可以cat systemd 單元。這將文件位置顯示為註釋。獎勵:它還顯示覆蓋。
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
希望能幫助你。
附言。為了方便起見,我通常會將這些命令放在別名檔案中。
P.PS。正如 Joaquin 所提到的,您可以使用 -P 標誌,而不是使用我正在使用/提到的 grep|awk 組合。
systemctl show nullmailer -P FragmentPath