Es gibt viele verschiedene Orte, an denen Systemd-Unit-Dateien abgelegt werden können. Gibt es eine schnelle und einfache Möglichkeit, Systemd zu fragen, woher es die Deklaration eines Dienstes gelesen hat, indem nur der Dienstname angegeben wird?
Antwort1
Für Einheiten, die in tatsächlichen, statischen Dateien definiert sind, ist dies wie folgt zu sehen 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)
Es gibt jedoch Einheiten, die nicht durch Dateien definiert sind, z. B. mit systemd-cron
installiert. Diese haben keinen sinnvollen Speicherort, der mit aufgeführt ist 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
In beiden Fällen hat das Fachgebiet jedoch einen FragmentPath
aufklärenden Charakter:
$ 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
Antwort2
Sie könnten die systemd-Einheit caten. Dies zeigt den Dateispeicherort als Kommentare an. Bonus: Es zeigt auch Overrides an.
systemctl cat sssd
# /lib/systemd/system/sssd.service
[Unit]
...
# /etc/systemd/system/sssd.service.d/override.conf
[Unit]
...
Antwort3
Das Folgende gibt mehrere Dateispeicherorte an
show
-- Eigenschaften einer oder mehrerer Einheiten/Jobs oder des Managers anzeigen
-p
--property=NAME
Nur Unterkünfte mit diesem Namen anzeigen
$ 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
Antwort4
Sie könnten Folgendes tun (am Beispiel von Nullmailer):
systemctl show nullmailer | grep FragmentPath | awk -F'=' '{print $2}'
Das Ergebnis wird ungefähr wie folgt aussehen:
/lib/systemd/system/nullmailer.service
Um den Inhalt der Servicedatei anzuzeigen, können Sie Folgendes tun:
cat $(systemctl show nullmailer | grep FragmentPath | awk -F'=' '{print $2}')
Und das Ergebnis wäre etwa wie folgt:
[Unit]
Description=nullmailer
[Unit]
Description=Nullmailer relay-only MTA
... stuff omitted for brevity ...
[Install]
WantedBy=multi-user.target
Ich hoffe es hilft.
PS: Normalerweise füge ich diese Befehle der Einfachheit halber in einer Aliasdatei ein.
P.PS. Wie Joaquin erwähnt hat, können Sie das Flag -P anstelle der von mir verwendeten/erwähnten Kombination grep|awk verwenden.
systemctl show nullmailer -P FragmentPath