Pegue a saída da matriz e coloque na nova matriz (script perl)

0

Eu tenho uma matriz configurada para verificar diferentes estações de trabalho para ver se algum log está presente e, se houver logs, para excluí-los. O problema é que, toda vez que eu executo o script, ele tem que rastrear todas as estações de trabalho todas as vezes (o comando para remover os logs só é feito 1 de cada vez). Existe uma maneira de verificar todas as estações de trabalho na primeira vez, e se os logs estiverem presentes, para configurar a próxima matriz para verificar apenas aqueles com logs presentes? E assim por diante e assim por diante até que ninguém seja deixado? Demora um pouco de tempo para verificar através de 100 estações de trabalho diferentes, quando apenas 10 ou mais têm logs. Aqui está o que eu tenho até agora (Unix AIX e perl v5.6.1):

my @workstation = qw(ws1 ws2 ws3 ws4 ws5 ws6 ws7 ws8 ws9 ws10 ws11 ws12);

foreach my $workstation (@workstation){
$logcount = 'ssh -q $workstation "ls /logs/$workstation | wc -l"';
chomp $logcount;

if($logcount == 0){
print "";
}

if($logcount > 0){
print "$workstation: $count\n";
'ssh -q $workstation "/tools/log_remover /logs/$workstation"'
}
    
por user3159380 04.12.2015 / 23:38

1 resposta

2

Por que verificar a contagem se você quiser excluí-las? Exclua os arquivos diretamente. Versão bash simples simples para remover logs com mais de 7 dias:

#!/bin/bash

HOSTS=( ws1 ws2 ws3 ws4 ws5 ws6 ws7 ws8 ws9 ws10 ws11 ws12 )

for CURRHOST in ${HOSTS[@]}
do
    ssh -q $CURRHOST "find /logs/$CURRHOST -type f -mtime +7 -exec rm -v {} \;"
done

Se você insistir em usar o perl e desejar preencher uma matriz contendo hosts que possuem arquivos de log que você pode usar:

my @workstation = qw(ws1 ws2 ws3 ws4 ws5 ws6 ws7 ws8 ws9 ws10 ws11 ws12);
my %wscount;

foreach my $workstation (@workstation){
  $logcount = 'ssh -q $workstation "ls /logs/$workstation | wc -l"';
  chomp $logcount;
  if ( $logcount > 0 )
  {
    $wscount{$workstation}=$logcount;
  }
}

foreach my $wswithlog (keys %wscount){
  printf "host $wswithlog: $wscount{$wswithlog}\n";
  'ssh -q $wswithlog "/tools/log_remover /logs/$wswithlog"'
}
    
por 04.12.2015 / 23:49

Tags