신비한 이유 때문에 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
을 트리거합니다.
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입니다.
사용자가 모뎀을 연결 한 전화를 사용자가 전화를 끊을 때마다 ('HUP') 'SIGHUP'이 전송됩니다. 근대적 인 관점에서, SSH가 종료 될 때 백그라운드에서 실행되는 프로그램은 SIGHUP을 수신합니다. –
참고 : https://linux.die.net/man/1/nohup –
감사의 피드백에 감사드립니다! 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