Приведенный ниже скрипт работает при выполнении в 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;
2
Jeff Schaller 8 Авг 2018 в 01:16

1 ответ

Лучший ответ

Действительно, Logfile::Rotate не вращается в зависимости от размера, что неудивительно, поскольку нигде в его документации не говорится об этом. Возможно, самым простым способом поворота в зависимости от размера было бы обернуть вызов rotate внутри if, например:

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

Это должно чередовать журналы только тогда, когда именованный файл больше 1 МБ (размер указывается в байтах).

5
dhag 1 Фев 2018 в 06:24
Спасибо за ответ, черт.. Можете ли вы проверить отредактированный сценарий.. ранее я разместил неправильный сценарий
 – 
Santhosh S T
1 Фев 2018 в 06:38
Код из вашего исходного вопроса выглядел правильно, за исключением того факта, что он будет безоговорочно вращаться. Обертывание вызова rotate внутри теста, как я сделал в своем ответе, должно помочь. Logfile::Rotate, похоже, не поддерживает ключ size, как в вашем отредактированном вопросе.
 – 
dhag
1 Фев 2018 в 07:36