Was ist der Unterschied zwischen diesen Ordnern, bevor alle Unit-Dateien in waren, /etc/systemd/system/
aber jetzt einige in /usr/lib/systemd/system
(<- unter CentOS oder /lib/systemd/system
<- unter Debian / Ubuntu) angezeigt werden?
Diese Frage ist bereits beantwortet und man 7 file-hierarchy
wird mit systemd ausgeliefert (es gibt auch eine Online-Version ):
/etc
System-specific configuration.
(…)
VENDOR-SUPPLIED OPERATING SYSTEM RESOURCES
/usr
Vendor-supplied operating system resources.
Usually read-only, but this is not required. Possibly
shared between multiple hosts. This directory should not
be modified by the administrator, except when installing
or removing vendor-supplied packages.
Grundsätzlich werden Dateien, die in Paketen enthalten sind, die aus dem Distributions-Repository heruntergeladen wurden, abgelegt /usr/lib/systemd/
. Änderungen, die vom Systemadministrator (Benutzer) vorgenommen wurden, werden in übernommen /etc/systemd/system/
.
Systemspezifische Einheiten überschreiben von Anbietern bereitgestellte Einheiten. Mit Drop-Ins können Sie nur bestimmte Teile von Unit-Dateien überschreiben, der Rest bleibt dem Hersteller überlassen (Drop-Ins sind seit dem Beginn von systemd verfügbar, wurden jedoch nur in v219 ordnungsgemäß dokumentiert; siehe man systemd.unit
).
Wenn Sie sich die Manpage ansehen, finden man systemd.unit
Sie eine Tabelle, in der die Unterschiede erläutert werden. Dies ist von einem CentOS 7.x-System.
UNIT LOAD PATH Unit files are loaded from a set of paths determined during compilation, described in the two tables below. Unit files found in directories listed earlier override files with the same name in directories lower in the list. Table 1. Load path when running in system mode (--system). ┌────────────────────────┬─────────────────────────────┐ │Path │ Description │ ├────────────────────────┼─────────────────────────────┤ │/etc/systemd/system │ Local configuration │ ├────────────────────────┼─────────────────────────────┤ │/run/systemd/system │ Runtime units │ ├────────────────────────┼─────────────────────────────┤ │/usr/lib/systemd/system │ Units of installed packages │ └────────────────────────┴─────────────────────────────┘
Wenn sie "installierte Pakete" sagen, beziehen sie sich auf alles, was über ein RPM installiert wurde. Dasselbe kann auch für Debian / Ubuntu angenommen werden, wo eine DEB-Datei das "installierte Paket" wäre.
HINWEIS: Die obige Tabelle unterscheidet sich geringfügig von einem Debian / Ubuntu-System.
Table 1. Load path when running in system mode (--system). ┌────────────────────┬─────────────────────────────┐ │Path │ Description │ ├────────────────────┼─────────────────────────────┤ │/etc/systemd/system │ Local configuration │ ├────────────────────┼─────────────────────────────┤ │/run/systemd/system │ Runtime units │ ├────────────────────┼─────────────────────────────┤ │/lib/systemd/system │ Units of installed packages │ └────────────────────┴─────────────────────────────┘
/usr/lib/systemd/system
/usr/lib/systemd/system
Auf einem CentOS / Fedora / RHEL-System können Sie wie folgt feststellen, welche Pakete welche Unit-Dateien besitzen:
$ rpm -qf /usr/lib/systemd/system/* |sort -u | head
abrt-2.1.11-50.el7.centos.x86_64
abrt-addon-ccpp-2.1.11-50.el7.centos.x86_64
abrt-addon-kerneloops-2.1.11-50.el7.centos.x86_64
abrt-addon-pstoreoops-2.1.11-50.el7.centos.x86_64
abrt-addon-vmcore-2.1.11-50.el7.centos.x86_64
abrt-addon-xorg-2.1.11-50.el7.centos.x86_64
accountsservice-0.6.45-7.el7.x86_64
acpid-2.0.19-8.el7.x86_64
alsa-utils-1.1.3-2.el7.x86_64
anaconda-core-21.48.22.134-1.el7.centos.x86_64
/etc/systemd/system
Wenn wir dasselbe tun /etc/systemd/system
, erwarten wir, dass wir keine Dateien finden, die einem RPM gehören (was auf meinem CentOS 7.x-System tatsächlich der Fall ist):
$ rpm -qf /etc/systemd/system/* /etc/systemd/system/*/* | grep -v 'not owned'
$
Denken Sie daran, dass Sie unter Umständen gelegentlich /usr/lib/systemd/system
Streudateien finden , z. B. mit Virtualbox (vboxadd *):
$ rpm -qf /usr/lib/systemd/system/* |sort -u | grep 'not owned'
file /usr/lib/systemd/system/initrd.target.wants is not owned by any package
file /usr/lib/systemd/system/shutdown.target.wants is not owned by any package
file /usr/lib/systemd/system/vboxadd.service is not owned by any package
file /usr/lib/systemd/system/vboxadd-service.service is not owned by any package
file /usr/lib/systemd/system/vboxadd-x11.service is not owned by any package
Da sind andere.
Die Erwartung ist, dass /usr/lib/systemd/system
es sich um ein Verzeichnis handelt, das nur System-Unit-Dateien enthalten sollte, die vom Paketmanager dort abgelegt wurden (YUM / DNF / RPM / APT / etc).
Hier werden die Dateien /etc/systemd/system
manuell vom Betreiber des Systems für Ad-hoc-Softwareinstallationen abgelegt, die nicht in Form eines Pakets vorliegen. Dazu gehören Softwareinstallationen vom Typ Tarball oder selbst erstellte Skripte.
/lib/systemd/system
vs./usr/lib/systemd/system
. Ich bin froh, dass ich diese Antwort gefunden habe./etc/systemd/system
einen Fehler erzeugt , wenn Sie es maskieren:Failed to execute operation: Invalid argument
; systemd versucht, die Datei durch einen Symlink zu / dev / null zu ersetzen. Nicht zu sagen, dass diese Antwort falsch ist, ist nur etwas, an das man sich erinnert./lib/systemd/system
und/usr/lib/systemd/system
deshalb stellte ich die Frage separat unix.stackexchange.com/questions/550001/…