Perl を使用したログの回転 Logfile::Rotate

Perl を使用したログの回転 Logfile::Rotate

次のスクリプトはCentOSで実行すると機能しますが、サイズに応じてログを回転しません。このスクリプトが実行されるたびに、新しいログが生成されます。誰でもこのスクリプトをサイズに合わせて機能させる方法を教えてください。

#!/usr/bin/perl
use Logfile::Rotate;
my $logfile = new Logfile::Rotate(
  File => '/var/log/remotehost/fakepath/Syslog.log',
  Count => 100,
  Gzip => '/usr/bin/gzip',
  size => 1*1024*1024,
  sub {
    open my $PID, '<', '/usr/lib/systemd/system/rsyslog.service' or
    die "Unable to open pid file:$!\n";
    chomp(my $pid = <$PID>);
    close $PID;
    kill 'HUP', $pid;
  }
);
# Log file locked (really) and loaded. Now let's rotate it.
$logfile->rotate();
# make sure the log file is unlocked (destroying object unlocks file)
undef $logfile;

答え1

サイズに応じて回転しないという事実は、Logfile::Rotate文書に回転に関する言及がないため、驚くことではありません。おそらく、サイズに基づいて回転する最も簡単な方法は、次のように呼び出しをrotateifでラップすることです。

if (-s '/var/log/remotehost/fakepath/Syslog.log' > 1048576) {
    $log->rotate();
}

指定されたファイルが1MB(バイト単位のサイズ)より大きい場合にのみログが回転されます。

関連情報