Вы можете изменить сценарий, чтобы в качестве дополнительного аргумента было указано имя сервера.
# usage example: <this script> Jun 26 2010 <server> <logfile>
use strict;
use warnings;
my($mon,$day,$year,$server,$file) = @ARGV;
open(my $fh,"ssh $server cat $file |") or die "can't open log $server:$file: $!\n";
while (my $line = <$fh>) {
if ($line =~ /.* $mon $day \d{2}:\d{2}:\d{2} $year:.*(ERROR:|backup-date=|host=|backup-size=|backup-time=|backup-status)/) {
print $line;
}
}
Моя версия использует тот факт, что функция Perl open
может «открыть» команду, а выходные данные команды представлены в качестве входных данных для вашего сценария.
---- редактировать
Что касается вашего дополнительного вопроса, если файл существует в одном и том же месте на нескольких хостах, вы можете поменять порядок аргументов и передать список хостов в командной строке:
# usage example: <this script> Jun 26 2010 <logfile> <server> ...
use strict;
use warnings;
my($mon,$day,$year,$file) = @ARGV;
splice(@ARGV, 0, 4, ()); # Discard first 4 args
foreach my $server ( @ARGV ) {
open(my $fh,"ssh $server cat $file |") or die "can't open log $server:$file: $!\n";
while (my $line = <$fh>) {
if ($line =~ /.* $mon $day \d{2}:\d{2}:\d{2} $year:.*(ERROR:|backup-date=|host=|backup-size=|backup-time=|backup-status)/) {
print $line;
}
}
close($fh);
}