/usr/lib/systemd/systemと/etc/systemd/systemの違いは何ですか?

/usr/lib/systemd/systemと/etc/systemd/systemの違いは何ですか?

以前はすべてのユニットファイルがありましたが、/etc/systemd/system/今はいくつかのファイルがあります/usr/lib/systemd/system(CentOSの場合は<-または/lib/systemd/systemDebian / Ubuntuの場合は<-)。このフォルダの違いは何ですか?

答え1

この質問はすでにman 7 file-hierarchysystemdで回答されています(オンライン版):

        /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/systemCentOS / 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/systemRPMが所有しているファイルが見つからないと予想されます(実際には私の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ユニットファイルを見つけることができます。

関連情報