私はPerlスクリプトを書いていますが、ガベージコレクションログからいくつかの行をキャプチャしてファイルに書き込む必要があります。
ログはリモートホストにあり、Net::OpenSSH
モジュールを使用して接続しています。
利用可能な最新のログファイルを読み取る必要があります。
シェルでは、次のコマンドを使用して最新のログを見つけることができます。
cd builds/5.7.1/5.7.1.126WRF_B/jboss-4.2.3/bin
ls -lat | grep '.log$' | tail -1
これは最新のログを返します:
-rw-r--r-- 1 load other 2406173 Jul 11 11:53 18156.stdout.log
したがって、Perlでは、そのログを見つけて開いて読み取るものを記述できるようにしたいと思います。
そのログファイルがある場合、指定した時間よりも長いタイムスタンプを持つすべての行を印刷したいと思います。指定されたタイムスタンプは$Runtime
、最新のログメッセージ時刻から差し引かれた変数です。
ガベージコレクションログの最後のメッセージは次のとおりです。
...
73868.629: [GC [PSYoungGen: 941984K->14720K(985216K)] 2118109K->1191269K(3065984K), 0.2593295 secs] [Times: user=0.62 sys=0.00, real=0.26 secs]
73873.053: [GC [PSYoungGen: 945582K->12162K(989248K)] 2122231K->1189934K(3070016K), 0.2329005 secs] [Times: user=0.60 sys=0.01, real=0.23 secs]
したがって$Runtime
、120秒の値がある場合、タイムスタンプ(73873.053-120)秒からすべての行を出力する必要があります。
結局、私のスクリプトは次のようになります...
open GARB, ">", "./report/archive/test-$now/GC.txt" or die "Unable to create file: $!";
my $ssh2 = Net::OpenSSH->(
$pathHost,
user => $pathUser,
password => $pathPassword
);
$ssh2->error and die "Couldn't establish SSH connection: ". $ssh2->error;
# Something to find and open the log file.
print GARB #Something to return certain lines.
close GARB;
これはこの質問にいくぶん似ていると思いますが、私が探しているものに合わせて調整する方法を考えることはできません。どんな助けでも大歓迎です!