Linux
如何找出目前正在執行的程序正在寫入的日誌文件名?
我們每分鐘都會設置一個基於 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
或類似的應該為您提供程序正在訪問的文件列表。