2017-01-30 1 views
1

신비한 이유 때문에 Hadoop 클러스터를 구축하는 시스템이 SIGHUP의 웨이브를 경험하는 것 같습니다. 모든 박스는 centos 6.7/8 및 Cloudera (CM + CDH) 5.9를 실행 중입니다. python, bash 및 strace를 사용하여 SIGHUP 발신자를 감지하는 방법

같은 SIGHUP 파가 하나의 시스템에서 발생

, 나는 프로세스 (하둡, ntpd 같은 OS에 대한 몇 가지 기본의 일부를) 갇히지보고, SIGHUP의 흔적은 여러 파일에 기록된다. var에/로그 /에서 한 가지 예는/메시지는 문제를 더 이해하기 위해

Jan 30 10:19:43 hadoop21 rsyslogd: [origin software="rsyslogd" swVersion="5.8.10" x-pid="2451" x-info="http://www.rsyslog.com"] rsyslogd was HUPed 
Jan 30 10:19:43 hadoop21 ntpd[135740]: ntpd exiting on signal 1 
Jan 30 10:19:43 hadoop21 init: tty (/dev/tty5) main process (134662) killed by HUP signal 
... 

처럼, 나는 이것이 궁극적 인 정보를 정말 확실하지 않다 (SIGHUP를 보내는 프로세스의 PID를 받고 시도하기로 결정 보이는 I 필요하지만 조사는 어딘가에서 시작해야한다).

이를 달성하기 위해, 나는 strace에 의해 수집 된 마지막 라인이 흥미있는 정보를 포함 할 것이라는 가정하에, 간단한 파이썬 스크립트, sighup_victim.py를 시작하고 여기에 strace 부착에 대해 생각했다.

22:04:42.791561 --- SIGHUP {si_signo=SIGHUP, si_code=SI_USER, si_pid=69035, si_uid=0} --- 
22:04:42.791910 +++ killed by SIGHUP +++ 

내가 성공으로이 해석 : 나는 터미널에서 orchestrator.py을 실행하고 수동으로 신호를 트리거 경우 $kill -SIGHUP <p.pid>에 내가 tracelog이 얻을으로 나는, 따라서, orchestrator.py를 통해 프로그래밍

orchestrator.py 

import subprocess 
p=subprocess.Popen(["python","sighup_victim.py"]) 
q=subprocess.Popen(["strace","-tt","-o","tracelog","-p",str(p.pid)]) 

그것을 할 - strace 실제로 SIGHUP이 피해자와 작성자에게 발송되었다고보고 할 수 있습니다.

그런 다음 모든 컴퓨터에 run_orchestrator.sh을 하는 스크립트와 함께 배포하고 run_orchestrator.sh을 통해 ssh을 트리거합니다.

지금까지 4 4 중 경우에하는 나는 SIGHUP 오는 파도 볼

, 나는 (예상대로) 죽어 sighup_victim.py 얻을 하지만 tracelog의 마지막 항목은

22:11:46.145040 select(0, NULL, NULL, NULL, {60, 0} <detached ...> 

strace를 마치 프로세스는 항상 sighup_victim.py 전에 죽었습니다. 나에게이 우연은 단순히 내가이 문제를 완전히 이해하지 못한다고 말하는 것이다.

나는 (특히 audit을 사용하여)이 아이디어를 구현하는 대안적인 방법을 찾고 있습니다.하지만 앞으로 일어날 일에 대해 더 잘 알 수 있도록 도와 주실 수 있습니까?

감사합니다.
문제에 대한 (더 이상) 설명은 at Cloudera community forum입니다.

+0

사용자가 모뎀을 연결 한 전화를 사용자가 전화를 끊을 때마다 ('HUP') 'SIGHUP'이 전송됩니다. 근대적 인 관점에서, SSH가 종료 될 때 백그라운드에서 실행되는 프로그램은 SIGHUP을 수신합니다. –

+1

참고 : https://linux.die.net/man/1/nohup –

+0

감사의 피드백에 감사드립니다! i) 내가 이해할 수있는 한 SIGHUP [링크] (http://stackoverflow.com/questions/19052354/sighup-for-reloading-configuration)의 한 가지 활용 사례 일뿐입니다. ii)'ssh'는'orchestrator.py'를 실행하는 데 걸리는 시간 동안 세션을 열어 두었다가 모두 완료됩니다. 그러나'popen'은'sighup_victim.py'가 [link] (https://docs.python.org/2/library/subprocess.html)에서 살아남을 수 있도록 보장합니다. 실제로 볼 수 있습니다. iii)'strace'에'sighup '을 시도했지만,'shell = False'로'Popen'을 호출했습니다. 대신'shell = True'를 시도해 보겠습니다. – fdeltedesco

답변

0

/var/log/kern.log 또는 dmesg에 어떤 것이 있습니까? 그것은 단일 기계에서 발생합니까?

Rob이 말한 것처럼 SIGHUP은 SIGKILL과 같은 OOM 커널 kill과는 완전히 다릅니다.

관련 문제