을 실행하면 service mongod start
특정 프로세스가 실행되고 거의 즉시 충돌하여 서비스가 실패하게 됩니다. 프로세스가 올바른 사용자로 실행되지 않기 때문에 문제가 발생한 것으로 생각됩니다.
안타깝게도 서비스 로그는 전혀 도움이 되지 않습니다.
그래서 어떤 사용자 아래에서 프로세스가 생성되는지 알고 싶습니다.
ps aux
프로세스가 너무 빨리 충돌하기 때문에 작동하지 않습니다.
사용자 이름 등을 포함하여 파일에 충돌이 발생하려는 모든 프로세스를 어떻게든 기록할 수 있습니까?
Docker 컨테이너 내에서 Debian Wheezy를 사용하고 있습니다.
답변1
한 가지 접근 방식은 자체 strace
래핑이 필요한 시작 프로세스를 래핑 하거나 적절한 래퍼를 호출하도록 변경한 다음 차례로 시작하는 것입니다 . 장점: 커널 모듈이 필요하지 않습니다. 단점: 작업 속도가 느려지 거나 서비스 파일을 지루하게 편집하거나(실행 취소하는 것을 잊지 마세요...) 알 수 없는 방식으로 문제를 방해할 수 있습니다.systemd
mongod.service
strace
mongod
mongod
#!/bin/sh
exec strace -ff -o /root/lookatthese -e trace=process /mongodb/startup/command/here
또 다른 방법은 커널 모듈이 필요하지만 단계 사이의 일반적인 보간 없이 진행 중인 작업을 보다 효율적으로 기록할 수 있는 sysdig
or를 사용하는 것입니다 .SystemTap
strace
# sysdig 'evt.type = execve'
...
execve
다음과 같은 것을 사용하는 사용자를 포함하여 일반적인 시작 명령을 실행하면 모든 호출이 표시됩니다.
# sysdig -p \
'%evt.time %proc.name[%proc.pid] uid=%user.uid ppid=%proc.ppid %proc.exeline' \
'evt.type = execve'
또는 더 많은 데이터를 캡처하고(시스템 사용량에 따라) 출력 파일을 자세히 분석할 수 있습니다.