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

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

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

调用java程序

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) 正在写入。因此,例如,如果MyJavaProgram当前有 2 个进程正在执行,我想知道每个进程的日志文件名。在这种情况下,我感兴趣/想知道.log扩展文件,尽管有 2 个扩展名 -.log.err

笔记:日志文件名按照这种模式生成,2011-10-17_19-28.log例如。我们的服务器是 RHEL4。

答案1

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

lsof | grep $PID |grep .log

或类似命令应该会给你提供该进程正在访问的文件列表。

相关内容