如何找出当前正在运行的进程正在写入的日志文件名?

Gna*_*nam 1 linux redhat command-line-interface centos

我们每分钟都会设置一个基于 cron 的 Java 程序调用。该 Java 程序调用是用 shell 脚本编写的,并设置为cron作业。每个调用的 Java 程序都定向到其自己单独的日志文件(使用日期和时间作为文件名,精确到分钟),如下所示:

调用javaprogram.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 &
Run Code Online (Sandbox Code Playgroud)

例如,我可以使用以下命令随时查找当前正在运行的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
Run Code Online (Sandbox Code Playgroud)

我的问题是,我想找出当前正在执行的Java 进程 (MyJavaProgram) 正在写入的实际日志文件名。因此,例如,如果MyJavaProgram当前有 2 个进程正在执行,我想知道每个进程的日志文件名。在这种情况下,我感兴趣/想知道.log扩展文件,尽管有 2 个扩展名 -.log.err.

注意:日志文件名以此模式生成,2011-10-17_19-28.log例如 。我们的服务器是RHEL4。

Ant*_*ibu 5

命令“lsof”可能会帮助您。

lsof | grep $PID |grep .log
Run Code Online (Sandbox Code Playgroud)

或类似的内容应该会为您提供进程正在访问的文件列表。