2014-05-15 1 views
0

쉘 스크립트를 통해 자바 쓰레드 덤프를 가져 와서 파일에 추가하고 싶을 때 catalina.out으로 가야합니다. 여기서 FD 1은 다음과 같습니다. 자바 프로세스를 가리킨다. kill -3 $(pidof java) |tee -a /dumpfile을 시도했지만 Java의 STDOUT이 스크립트의 제어 터미널이 아니기 때문에 빈 파일로 끝납니다. Java 프로세스를 닫지 않고 출력을 리디렉션하여 다시 열지 않고도이 작업을 수행 할 수있는 방법이 있습니까? bash 쉘이있는 Linux.제어 터미널이 아닌 프로세스에서 리디렉션 수행하기

답변

0

다음은 스레드 덤프를 캡처하고 전자 메일로 보내는 데 사용 된 솔루션입니다. 프로세스의 STDOUT을 리디렉션하지 않으면 catalina.out에서 관련 정보를 가져옵니다.

#!/bin/bash 
CATOUT=/opt/tomcat/logs/catalina.out 
DUMPSTART=$(grep -n dump|tail -n1|cut -d':' -f1) 
DUMPEND=$(wc -l $CATOUT|cut -d' ' -f1) 

kill -3 $(pidof java) 
sed -n "${DUMPSTART},${DUMPEND)p" $CATOUT |mail -s "Java thead dump" [email protected] 
1

다음이 시도 :

1 터미널에서 :

tail -f /proc/$(pidof java)/fd/1 | tee -a /dumpfile 

2- 다른 터미널에서 :

kill -3 $(pidof java) 

을 이렇게하면/proc 디렉토리/java_pid /에 대한 사용 권한을 읽고있는 것을 전제로 fd/1은 루트라면 파일이어야한다.

+0

나는 내 웹 서버 중 하나에서 시도해도 정상적으로 작동합니다. – Tiago

관련 문제