catalina 로그를 로테이트하기 위한 펄 스크립트입니다. 일부 기능이 추가되었습니다. 

  • Argument 1 : 로그 이름
  • Argument 2 : 로그 주기
#!/usr/bin/perl
 
## ARGV[1]
 
if ( $ARGV[1] ne "") {
  $instName=$ARGV[1];
}
elsif ( $ENV{'INST_NAME'} ne "" ) {
  $instName=$ENV{'INST_NAME'};
}
else {
  $instName="catalina";
}
 
## ARGV[2]
 
if ( $ENV{'LOGS_PL_ROTATE'} ne "" ) {
  $rotate=$ENV{'LOGS_PL_ROTATE'};
}
elsif ( $ARGV[2] eq "") {
  $rotate="daily";
} else {
  $rotate=$ARGV[2];
}
 
if ( $rotate eq "daily" ) {
  $logsPostfix="%02d%02d%02d";
} elsif ( $rotate eq "hourly" ) {
  $logsPostfix="%02d%02d%02d%02d";
} else {
  $logsPostfix="%02d%02d%02d";
}
 
$TRUE=1;
$FALSE=0;
$DEBUG=$FALSE;
$DEFAULT_LOG_PFX="$ARGV[0]/logs/$instName.out.";
$logsPrefix=$DEFAULT_LOG_PFX;
$ignoreConsole=$FALSE;
 
while ($aLine=<STDIN>){
  ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time());
  $logFile=$logsPrefix.sprintf($logsPostfix,($year+1900),($mon+1),$mday,$hour,$min,$sec);
  open(logH,">> $logFile");
  #Auto flush ON
  select((select(logH),$|=1)[0]);
  #use IO::Handle;
  #logH->autoflush($TRUE);
  print logH $aLine;
  if($ignoreConsole){
    print $aLine;
  }
  close(logH);
}