rdrcollector/rdrarchiver.pl

77 lines
2.5 KiB
Perl
Raw Permalink Normal View History

2024-08-21 09:27:24 +03:00
#!/usr/bin/perl
#########################################################
# Скрипт для архивирования файлов созданных rdrcollector
#
# вызывается командой:
# rdrarchiver.pl /usr/local/etc/rdrcollector.conf
#
# Запускается по крону с требуемой периодичностью (сутки)
#
# Автор: Сергей Калинин e-mail: banzaj28@yandex.ru
# распространяется под лицензией GPL
# (c) 2015
#########################################################
use IO::File;
use Getopt::Long;
use File::Path qw(make_path);
my $opts_pair = IO::File->new("$ARGV[0]") or
die "Can not open: $opts{'conf'} $!\n";
while (<$opts_pair>)
{
($key, $value) = split('=');
$value =~ s/^\s+|\s+$//g;
$opts{$key} = $value;
#print $opts{'source-port'};
}
$opts_pair->close();
# определяем текущую системную дату
my $date = ` /bin/date "+%Y %m %d %H %M %S"`;
my ($cur_year,$cur_month,$cur_day,$cur_hour,$cur_min,$cur_sec) = split('\s',$date);
#print "$cur_year,$cur_month,$cur_day,$cur_hour,$cur_min,$cur_sec";
# ищем файлы старше 1 дня и архивируем
#$arch = '/bin/find '.$opts{'out-dir'}.' -type f -mtime +1 -exec gzip {} \; -print > rdrcollector.log';
#print "$arch\n";
#my $result = `$arch`;
# Получаем список заархивированных файлов
opendir(DIR, "$opts{'out-dir'}");
my @files = grep('*',readdir(DIR));
#print files;
#my @files = grep(/\.gz/,readdir(DIR));
closedir(DIR);
# создаем каталог для соответствующих сжатых файлов
foreach my $file (@files)
{
#print $file;
# в зависимости от имени файла определяем и создаём каталог куда его перемещать
my $year = substr($file,0,4);
my $month = substr($file,4,2);
my $day = substr($file,6,2);
#print "$year $month $day - $cur_day\n";
if ($day ne $cur_day) {
$dir = $opts{'archive-dir'}."/".$year."/".$month."/".$day;
make_path $dir;
my $cmd = '/usr/bin/gzip '.$opts{'out-dir'}.'/'.$file;
#print $cmd."\n";
my $result = `$cmd`;
#print $result;
# Перемещаем файл в соответствующий каталог
$move = '/bin/mv '.$opts{'out-dir'}.'/'.$file.'.gz '. $dir.' > rdrcollector.log';
print "$move\n";
my $mvResult = `$move`;
}
}