我们每分钟都会设置一个基于cron的Java程序调用。 这个Java程序调用是写在一个shell脚本中,并设置为cron作业。 每个被调用的Java程序都被定向到它自己的单独的日志文件(使用date和时间作为文件名,精度高达几分钟),如下所示:
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扩展名文件,尽pipe有两个扩展名 – .log和.err 。
注:例如,以这种模式生成日志文件名称,例如2011-10-17_19-28.log 。 我们的服务器是RHEL4。
命令“lsof”可能会帮助你在这里。
lsof | grep $PID |grep .log
或类似的应该让你有一个进程正在访问的文件列表。