2014-05-15 67 views
0

我希望偶爾通過shell腳本執行java線程轉儲並將它們追加到文件中,同時也允許它們轉到catalina.out,這是FD 1的地方指向Java過程。我試過kill -3 $(pidof java) |tee -a /dumpfile,但最終得到一個空文件,因爲Java的STDOUT不是我的腳本的控制終端。有沒有辦法做到這一點,而不關閉Java過程,並重新打開它的輸出重定向?帶有bash shell的Linux。在另一終端在不在控制終端的進程上執行重定向

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

2-:

回答

0

這是我最終用來捕獲和發送線程轉儲的解決方案。它不會重定向進程的標準輸出,它只是從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-在終端

kill -3 $(pidof java) 

這裏假設你已閱讀的/ proc/java_pid /權限fd/1如果你是root的話應該是文件。

+0

我試着在我的Web服務器之一,工作正常。 – Tiago

相關問題