カーネルパラメータ+再起動後にcustom.confでカーネルパラメータを更新する正しい方法は何ですか?

カーネルパラメータ+再起動後にcustom.confでカーネルパラメータを更新する正しい方法は何ですか?

ファイルに次のカーネルパラメータを設定します。99-custom.conf

more /etc/sysctl.d/99-custom.conf

net.ipv4.tcp_low_latency = 1
net.ipv4.tcp_adv_win_scale = 1
net.ipv4.tcp_max_syn_backlog = 30000
net.ipv4.tcp_max_tw_buckets = 2000000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 5
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.accept_source_route = 2
net.ipv4.tcp_mtu_probing = 1

動的に設定するには、上記のパラメータを使用できます。sysctl -p /etc/sysctl.d/99-custom.conf

しかし、もちろん、これらの値は再起動すると消えます。

したがって、この問題を解決する 1 つの方法は、次を設定することです。/etc/rc.local

〜のように

more /etc/rc.local
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run chmod +x /etc/rc.d/rc.local to ensure
# that this script will be executed during boot.

touch /var/lock/subsys/local

sysctl -p  /etc/sysctl.d/99-custom.conf

上記のアプローチは正しいですか?

答え1

このディレクトリが標準の/etc/sysctl.d/Linuxディストリビューションに存在する場合は、次のように動作する起動スクリプトまたはシステムユニットがすでに存在する可能性が高くなります。

for i in /etc/sysctl.d/*.conf
do
    sysctl -p "$i"
done

つまり、ディレクトリ内のすべてのファイルをsysctl -p読み取るスクリプトやその他の機能がある可能性が高くなります。ただし、システムがinitramfsで実行されている間、起動プロセスの初期に発生する可能性があるため。ディストリビューションごとにバージョンが異なります。*.conf/etc/sysctl.d//etc/sysctl.d/

/etc/sysctl.d/しかし、ディレクトリを作成した場合あなた自身すると、システムは自動的にファイルを読み込みません。 1つのファイルにのみ興味がある場合は、/etc/sysctl.d/99-custom.conf今持っている方法で確実に作業を実行できます。/etc/rc.local

しかし、あなたは自分で罠を作っているかもしれません。

AnsibleやSaltなどのシステム管理オートメーションソリューションがより一般的になるにつれて、単一の設定/etc/<something>.confファイル(たとえば)を必要な数の設定ファイルセクションに配置できるディレクトリに置き換え(または拡張)することが一般的なパターンになりました。たとえば/etc/<something>.d/*.conf。通常、これらのディレクトリが作成されると、その構成を読み取るシステムは読み取りに変更されます。みんなパターンと一致するそのディレクトリの設定ファイル(したがってエディタのバックアップファイルなどを自動的に避ける)これは時々呼び出されます。ディレクトリに入れるこれは、構成フラグメントを挿入してコマンドを実行して構成を再ロードするか、関連サービスを再起動できるためです。これにより、自動化された構成管理が非常に簡単になります。

独自の/etc/sysctl.d/ディレクトリを作成し、/etc/rc.localそのディレクトリからのみ読み取るように設定すると、/etc/sysctl.d/99-custom.confこれを忘れることがあります。そうしたある日、いくつかの新しいsysctl設定を追加する必要がありますが、あなたやあなたの同僚の一人がこれを見て、「/etc/sysctl.d/ああ、ここに新しい組み込みディレクトリスキームがあるので、新しい設定を追加でき、/etc/sysctl.d/98-more-custom.conf「完了」だと思います。その後、再起動後に新しい設定が無視されると非常にパニックになります。

したがって、実際にディレクトリを作成する場合は、この回答の先頭の1行/etc/sysctl.d/を4行に置き換えることをお勧めします。これにより、より多くのファイルが追加されても、ディレクトリは期待どおりに機能します。sysctl -p /etc/sysctl.d/99-custom.conf/etc/rc.local/etc/sysctl.d/*.conf

/etc/sysctl.d/オペレーティングシステムのインストーラによって標準で作成されたがinitramfsを再ビルドしても起動時にファイルが使用されない場合は、ディストリビューションマネージャに不完全なドロップ実装のバグ*.confレポートを送信できます。/etc/sysctl.d/*.confディレクトリモードで。

関連情報