以前はすべてのユニットファイルがありましたが、/etc/systemd/system/
今はいくつかのファイルがあります/usr/lib/systemd/system
(CentOSの場合は<-または/lib/systemd/system
Debian / Ubuntuの場合は<-)。このフォルダの違いは何ですか?
答え1
この質問はすでにman 7 file-hierarchy
systemdで回答されています(オンライン版):
/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.
デフォルトでは、配布リポジトリからダウンロードしたパッケージに含まれるファイルが入ります/usr/lib/systemd/
。システム管理者(ユーザー)が変更した内容はに入ります/etc/systemd/system/
。
システム固有のデバイスは、ベンダーから提供されたデバイスよりも優先されます。ドロップインを使用すると、ユニットファイルの特定の部分のみを上書きし、残りはベンダーに任せることができます(ドロップインはsystemd以降で利用可能でしたが、v219でのみ正しく文書化されています。参考資料を参照man systemd.unit
)。
答え2
背景
マニュアルページを見ると、man systemd.unit
違いを説明する表があります。これはCentOS 7.xシステムからのものです。
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 │ └────────────────────────┴─────────────────────────────┘
「インストール済みパッケージ」とは、RPMを介してインストールされたすべてのパッケージを意味します。 DEBファイルが「インストールされたパッケージ」であるDebian / Ubuntuでも、同じ状況が想定されることがあります。
メモ:上記の表は、Debian/Ubuntu システムでは若干異なります。
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
CentOS / Fedora / RHELシステムでは、次のように、どのパッケージにどのユニットファイルがあるかを識別できます。
$ 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
として同じ操作を実行すると、/etc/systemd/system
RPMが所有しているファイルが見つからないと予想されます(実際には私のCentOS 7.xシステムの場合です)。
$ rpm -qf /etc/systemd/system/* /etc/systemd/system/*/* | grep -v 'not owned'
$
異常値
/usr/lib/systemd/system
時々、あなたは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
まだもっと手に入れました。
結論として
この/usr/lib/systemd/system
ディレクトリには、パッケージマネージャ(YUM / DNF / RPM / APT / etc)が配置したシステム単位のファイルのみを含める必要があります。
/etc/systemd/system
パッケージではなく一時ソフトウェアをインストールするために、システムオペレータはファイルをここに手動で配置します。これには、tarball型ソフトウェアのインストールまたはhomebrewスクリプトが含まれます。
答え3
ランタイムファイルは、/run/systemd/system
再起動時に変更/変更を維持せずに、現在の起動中にプロセス(ユニット)を変更する機能で発生します。
~からシステム制御.1:
--runtime
When used with enable, disable, edit, (and related commands),
make changes only temporarily, so that they are lost on the
next reboot. This will have the effect that changes are not
made in subdirectories of /etc/ but in /run/, with identical
immediate effects, however, since the latter is lost on
reboot, the changes are lost too.
Similarly, when used with set-property, make changes only
temporarily, so that they are lost on the next reboot.
Debian システムを使用して、パッケージの有無にかかわらずdpkg-query -S
ユニットファイルを見つけることができます。