Найдите местоположение файловой службы юнита 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 unit. Это покажет расположение файла в виде комментариев. Бонус: это также покажет переопределения.

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.S. Обычно я помещаю эти команды в файл псевдонимов просто для удобства.

P.P.S. Как упомянул Хоакин, вы можете использовать флаг -P вместо использования комбинации grep|awk, которую я использовал/упомянул.

systemctl show nullmailer -P FragmentPath

Связанный контент