테스트 환경
나는ubuntu/bionic64
부랑자 상자내 테스트 환경으로.
전제조건
VM을 만든 후 ansible 2.9.23
다음과 같이 설치했습니다.공식 문서의 지침.
모듈을 사용하고 싶기 때문에 ansible.posix
컬렉션( ) 도 설치했습니다 .ansible-galaxy collection install ansible.posix
ansible.posix.sysctl
현재 핵심 패턴이 내가 원하는 것이 아닌지 확인합니다.
vagrant@ubuntu-bionic:~$ sysctl kernel.core_pattern
kernel.core_pattern = |/usr/share/apport/apport %p %s %c %d %P %E
또한 /etc/sysctl.conf
핵심 패턴이 없었습니다.
vagrant@ubuntu-bionic:~$ grep "core_pattern" /etc/sysctl.conf
vagrant@ubuntu-bionic:~$
나의 의도
핵심 패턴을 /var/tmp/core.%h.%e.%t
.
제가 한
다음 ansible
명령을 실행했습니다.
ansible -bKvvv -m "sysctl" -a "name=kernel.core_pattern state=present value='/var/tmp/core.%h.%e.%t' reload=yes" localhost
출력에 성공했습니다.
localhost | CHANGED => {
"changed": true,
"invocation": {
"module_args": {
"ignoreerrors": false,
"name": "kernel.core_pattern",
"reload": true,
"state": "present",
"sysctl_file": "/etc/sysctl.conf",
"sysctl_set": false,
"value": "/var/tmp/core.%h.%e.%t"
}
}
}
또한 현재 구성을 확인했습니다.
vagrant@ubuntu-bionic:/etc$ sysctl kernel.core_pattern
kernel.core_pattern = /var/tmp/core.%h.%e.%t
core_pattern
또한 이 내용이 다음과 같이 작성되었음을 확인했습니다 /etc/sysctl.conf
.
vagrant@ubuntu-bionic:~$ grep "core_pattern" /etc/sysctl.conf
kernel.core_pattern=/var/tmp/core.%h.%e.%t
그런 다음 VM을 재부팅했습니다. 재부팅 후 현재 유효한 항목이 core_pattern
롤백되었습니다.
vagrant@ubuntu-bionic:~$ sysctl kernel.core_pattern
kernel.core_pattern = |/usr/share/apport/apport %p %s %c %d %P %E
내 생각과 내가 시도한 것
이 질문첫째로 약 10년 전에 요청되었고 둘째로 Ubuntu Server 18.04가 upstart
더 이상 사용되지 않는 것 같기 때문에 나에게는 해당되지 않는 것 같습니다.
다른 .conf
파일을 나중에 읽을 수 있다고 생각하여 /etc/sysctl.conf
어딘가에서 설정을 재정의했습니다. 하지만sysctl(8)
매뉴얼 페이지.conf
읽을 파일 의 순서를 나열하며 /etc/sysctl.conf
다른 모든 항목보다 우선하는 마지막 순서여야 하는 것처럼 보입니다.
sysctl.conf(5)
매뉴얼 페이지와 동일한 주문 목록을 제공합니다 sysctl(8)
.
나는 아무것도 찾지 못했습니다sysctl.d(5)
, 어느 하나. 실제로 "구성 디렉터리 및 우선 순위" 섹션은 내 이해를 확인시켜줍니다.
/etc/에 있는 파일은 /run/ 및 /lib/에 있는 동일한 이름의 파일을 대체합니다. /run/에 있는 파일은 /lib/에 있는 동일한 이름의 파일을 대체합니다.
kernel.core_pattern
수동으로 실행하면 예상대로 설정된다는 것을 알았습니다 sudo sysctl --system
. 이는 기본적으로 이러한 시스템 설정을 읽지 않는다는 의미일 수 있습니다.
답변1
추가 조사 결과 kernel.core_pattern
에 의해 덮어쓰기된 것으로 나타났습니다.패키지apport
시스템 부팅시.
apport
"/usr/share/apport/apport"라는 문자열을 봤을 때 확인해 볼 생각을 했어야 했어요 . apport
실제로 덮어쓰는 것인지 확실하지 않아서 kernel.core_pattern
소스 코드를 살펴보기로 결정했습니다.
을 실행하여 apt-cache policy apport
내가 사용하고 있는 버전이 다음과 같다는 것을 알았습니다 2.20.9-0ubuntu7.24
.
vagrant@ubuntu-bionic:~$ apt-cache policy apport
apport:
Installed: 2.20.9-0ubuntu7.24
Candidate: 2.20.9-0ubuntu7.24
Version table:
*** 2.20.9-0ubuntu7.24 500
500 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 Packages
500 http://security.ubuntu.com/ubuntu bionic-security/main amd64 Packages
100 /var/lib/dpkg/status
2.20.9-0ubuntu7 500
500 http://archive.ubuntu.com/ubuntu bionic/main amd64 Packages
vagrant@ubuntu-bionic:~$
그럼 apport
~에런치패드 페이지, 다운로드 링크를 찾았습니다.appport_2.20.9-0ubuntu7.tar.gz.
소스코드를 검색해 보니 파일 debian/apport.init
내용이 다음과 같았습니다.
do_start()
{
...
...
echo "|$AGENT %p %s %c %d %P" > /proc/sys/kernel/core_pattern
echo 2 > /proc/sys/fs/suid_dumpable
}
그래서 dpkg -L apport
내 VM을 실행하여 다음 파일이 있는지 확인했습니다.
vagrant@ubuntu-bionic:~$ dpkg -L apport | grep init
/etc/init.d
/etc/init.d/apport
정확히 일치하는 파일 이름을 가진 파일이 없었지만 살펴보기로 결정 /etc/init.d/apport
하고 이것이 내가 찾고 있던 파일이라는 것을 알았습니다.
do_start()
{
...
...
echo "|$AGENT %p %s %c %d %P %E" > /proc/sys/kernel/core_pattern
echo 2 > /proc/sys/fs/suid_dumpable
}
나는 그것이 /etc/sysctl.conf
서비스에 의해 읽힌다는 것을 알고 있었기 systemd-sysctl
때문에 다음으로 확인하고 싶은 것은 서비스가 systemd-sysctl
이전에 시작되었는지 여부였습니다 apport
.
관련 서비스 가 있는지 검색하여 apport
찾았습니다.
vagrant@ubuntu-bionic:~$ systemctl list-units | grep apport
apport.service loaded active exited LSB: automatic crash report generation
그런 다음 상호 종속성을 확인하고 apport.service
다음 이후에 시작됨을 발견했습니다 systemd-sysctl.service
.
vagrant@ubuntu-bionic:~$ systemctl list-dependencies apport.service
apport.service
● ├─system.slice
● └─sysinit.target
...
● ├─systemd-sysctl.service
...
...
vagrant@ubuntu-bionic:~$
즉, in systemd-sysctl.service
의 설정을 올바르게 읽었 지만 설정이 즉시 에 의해 덮어쓰여진다는 뜻입니다 .kernel.core_pattern
/etc/sysctl.conf
apport.service
이를 확인하기 위해 다음 두 줄을 추가했습니다 /etc/init.d/apport
.
do_start()
{
...
...
# NOTE(ywen): Write the current value to a file.
sysctl kernel.core_pattern > /home/vagrant/sysctl.kernel.core_pattern.txt
echo "|$AGENT %p %s %c %d %P %E" > /proc/sys/kernel/core_pattern
echo 2 > /proc/sys/fs/suid_dumpable
# NOTE(ywen): Append the current value to the file.
sysctl kernel.core_pattern >> /home/vagrant/sysctl.kernel.core_pattern.txt
}
그런 다음 VM을 재부팅했습니다. VM이 다시 가동되었을 때 파일에 /home/vagrant/sysctl.kernel.core_pattern.txt
다음 내용이 포함되어 있음을 발견했습니다.
vagrant@ubuntu-bionic:~$ cat sysctl.kernel.core_pattern.txt
kernel.core_pattern = /var/tmp/core.%h.%e.%t
kernel.core_pattern = |/usr/share/apport/apport %p %s %c %d %P %E
vagrant@ubuntu-bionic:~$
실제로 내 설정은 올바르게 읽혀졌지만 apport
.