我们设置了每分钟一次基于 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
或类似命令应该会给你提供该进程正在访问的文件列表。