커널 매개변수 + 재부팅 후 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

그러나 물론 이러한 값은 다시 시작하면 사라집니다.

따라서 이 문제를 해결하는 한 가지 방법은 다음을 설정하는 것입니다./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/하지만 디렉토리를 생성했다면당신 자신, 그러면 시스템이 자동으로 파일을 읽지 않습니다. 하나의 파일에만 관심이 있다면 /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"완료"라고 생각합니다. ..그런 다음 재부팅 후 새 설정이 무시되면 매우 당황하게 됩니다.

따라서 실제로 디렉토리를 생성하는 경우 이 답변 시작 부분의 /etc/sysctl.d/한 줄을 네 줄로 바꾸는 것이 좋습니다 . 이렇게 하면 더 많은 파일이 추가 되더라도 디렉터리가 예상대로 작동합니다 .sysctl -p /etc/sysctl.d/99-custom.conf/etc/rc.local/etc/sysctl.d/*.conf

/etc/sysctl.d/운영 체제 설치 프로그램에 의해 표준으로 생성되었지만 initramfs 를 다시 빌드한 후에도 부팅 시 파일이 사용되지 않는 경우 배포판 관리자에게 불완전한 drop 구현에 대한 *.conf버그 보고서를 보낼 수 있습니다. /etc/sysctl.d/*.conf디렉토리 모드에서.

관련 정보