尋找 systemd 單元檔案服務的位置

尋找 systemd 單元檔案服務的位置

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

相關內容