我设置了一个阵列来检查不同的工作站以查看是否存在任何日志,如果存在日志,则将其删除。问题是,每次我执行脚本时,它都必须每次爬行所有工作站(删除日志的命令一次只能执行一次)。有没有办法第一次检查所有工作站,如果存在日志,则设置下一个阵列以仅检查存在日志的工作站?以此类推,直到没有人留下为止?当只有 10 个左右的工作站有日志时,检查 100 个不同的工作站需要花费一些时间。这是我到目前为止所拥有的(Unix AIX 和 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"`
}
答案1
如果您只想删除它们,为什么要检查计数?直接删除文件。简单的 bash 版本可删除超过 7 天的日志:
#!/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
如果您坚持使用 perl 并希望填充包含具有日志文件的主机的数组,您可以使用:
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"`
}