sysctl.confは最後のゲームですか?

sysctl.confは最後のゲームですか?

sysctl.conf過去のゲームに関する公式文書はどこで見つけることができますか?

したがって、ファイルには2つの項目があります/etc/sysctl.conf

vm.swappiness=10
vm.swappiness=11

どちらが勝ちますか?最後のもの?ディレクトリにファイルがあるとどうなりますか/etc/sysctl.d

答え1

このような正式な文書はないようです。sysctlアイテムは次のように処理されます。procpsとシステムですが、両方のプロジェクトのドキュメントは、同じ設定ファイル内のエントリを処理する方法を説明しています。

つまり、sysctl.conf他のファイル(そのファイルまたは別の場所)があっても、/etc/sysctl.dどのシステムロード設定が使用されているかに関係なく、最後のエントリが適用されます。

procps

アイテムの処理方法を理解するには、次の点procpsを見てください。ソースコードsysctl。これは、前の項目の知識なしに後の項目が処理されるため、最後の項目が勝利することを示します(該当するPreload関数を参照)。複数の設定ファイルがコマンドラインに提供されると、設定ファイルは次の説明に従って順番に処理されます。マニュアルページ:

このオプションは、引数がsysctl指定された順序で読み取られるファイルであることを意味します。

このオプションを使用すると、状況が少し複雑になります--system。しかし、少なくとも文書化されています。

すべてのシステム構成ファイルから設定をロードします。上から下に与えられた順序で、次のリストのディレクトリからファイルを読み込みます。指定されたファイル名を持つファイルがロードされると、後続のディレクトリにある同じ名前のファイルはすべて無視されます。

  • /run/sysctl.d/*.conf
  • /etc/sysctl.d/*.conf
  • /usr/local/lib/sysctl.d/*.conf
  • /usr/lib/sysctl.d/*.conf
  • /lib/sysctl.d/*.conf
  • /etc/sysctl.conf

文書が完全ではありません。前述のように、特定のファイルのエントリは順次適用され、同じ設定に対して以前に指定されたすべての値をオーバーライドします。さらにPreloadSystem関数を見ると、ファイルは名前順に処理され、/etc/sysctl.conf無条件(つまり以前のディレクトリの同じ名前のファイルは上書きされません。)

システム

systemdには独自のsysctlハンドラがあり、次のドキュメントで説明されています。このsysctl.dヘルプページ;優先順位に関するセクションがあります:

/etc/設定ファイルは、、、/run/および優先順位に従ってディレクトリから読み取られます。/usr/lib/これらの構成ディレクトリの各構成ファイルは、次の形式で名前が付けられます。filename.conf。のファイルは/etc/、と同じ名前のファイルを上書きします。のファイルを上書きします。/run//usr/lib//run//usr/lib/

[...] すべての構成ファイルは、そのファイルが置かれているディレクトリに関係なく、ファイル名に基づいてアルファベット順にソートされます。複数のファイルが同じオプションを指定する場合は、アルファベット順に最新の名前を持つファイルエントリが優先されます。ファイルの並べ替えを簡素化するには、すべてのファイル名の前に2桁の数字とダッシュを付けることをお勧めします。

同様に、単一の構成ファイルの後続の項目は前の項目を上書きします。

答え2

この主張をするより実用的な方法は次のとおりです。

sysctl最初にすべきこと:単語の前にプレフィックスを付けると、値は適用されませんsysctl.conf(「マンページは笑「あなたが言ったように、注意深く読んでいないようです。)そしてこれをテストするのは簡単な作業です。/etc/sysctl.conf

vm.swappiness = 60
vm.swappiness = 61

私はこれがシステムの負荷に応じて小さな違いを生む影響が少ないsysctlであることを知っているので、ここでswappineを使用しています(デフォルトはほとんどのディストリビューションでは60です)。次のように入力してこのファイルのみを適用してください。sysctl -p /etc/sysctl.conf(マンページ)。値をもう一度確認してください。sysctl -a

root@host:~# sysctl -a | grep "vm.swappiness"
vm.swappiness = 61

望むより。

今、トップダウンアプローチでファイルを読むことがわかりました。ただ読んでください。sysctl.dマンページは、システムにsysctlファイルを伝播する優先順位に関する情報を提供します。 @Stephen Kittの答えですでに説明したように、ここではこの情報を繰り返しません。

また、sysctl.dこのディレクトリの優先順位は、使用しているディストリビューションがsystemdに基づいているかどうかによって異なります。

答え3

後で誰かがこれを見つけ、システムにprocps(RHEL、CentOSなど)がない場合は、「systemctl --system」と「systemd-sysctl.service」が異なる順序でディレクトリを適用することがわかります。そのため、ファイル名ファイル順に上書きすることに注意してください。 sysctl オーバーライドの場合、最後に読み取った値が適用されるため、ファイル名の順序がそしてディレクトリの順序が重要です。

関連情報