Linux

如何找出目前正在執行的程序正在寫入的日誌文件名?

  • October 18, 2011

我們每分鐘都會設置一個基於 cron 的 Java 程序呼叫。此 Java 程序呼叫是用 shell 腳本編寫的,並設置為cron作業。每個呼叫的 Java 程序都被定向到其自己的單獨日誌文件(使用日期和時間作為文件名,精確到分鐘),如下所示:

calljavaprogram.sh

DATE=`date +%Y-%m-%d_%H-%M`
/usr/java/jdk1.6.0/bin/java -Xms512m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError MyJavaProgram 2>&1 >> $DATE.log | tee -a $DATE.err >> $DATE.log &

例如,我可以隨時使用以下命令找出目前正在執行的 Java 程序(MyJavaProgram):

[root@user ~]# ps -ef |grep MyJavaProgram
user    4321     1  0 Oct17 ?        00:00:17 /usr/java/jdk1.6.0/bin/java -Xms512m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError MyJavaProgram
user    5747     1  0 Oct17 ?        00:00:11 /usr/java/jdk1.6.0/bin/java -Xms512m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError MyJavaProgram

我的問題是,我想找出目前正在執行的Java 程序 (MyJavaProgram) 正在寫入的實際日誌文件名。因此,例如,如果目前有 2 個MyJavaProgram正在執行,我想知道每個程序的日誌文件名。在這種情況下,我有興趣/想知道.log擴展文件,儘管有 2 個擴展 -.log.err.

**注意:**日誌文件名以這種模式生成,2011-10-17_19-28.log例如。我們的伺服器是 RHEL4。

命令“lsof”可能會幫助你。

lsof | grep $PID |grep .log

或類似的應該為您提供程序正在訪問的文件列表。

引用自:https://serverfault.com/questions/322468