Log rotate usando perl Logfile :: Rotate

3

O script abaixo funciona quando executado no CentOS, mas não roda logs com base no tamanho. Um novo log é gerado toda vez que eu executo este script. Alguém pode me dizer como fazer esse script funcionar com base no tamanho?

#!/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;
    
por Santhosh S T 01.02.2018 / 03:50

1 resposta

4

De fato, Logfile::Rotate não roda com base no tamanho, o que não deve ser surpreendente, já que em nenhum lugar sua documentação diz isso. Talvez a maneira mais simples de rodar com base no tamanho seria encapsular a chamada para rotate dentro de um if, por exemplo:

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

Isso deve girar os logs somente quando o arquivo nomeado for maior que 1 MB (o tamanho é dado em bytes).

    
por 01.02.2018 / 04:24