Скрипт создания архива конфигурационных файлов FreeBSD сервера
Продолжаю автоматизировать работу сервера. В этот раз руки коснулись автоматизации создания архива с конфигурационными файлами. При этом задачи были поставлены следующие:
1. Пути для архивации должны лежать в отдельном файле.
2. Архивироваться должен на сетевой ресурс расшаренный под Windows Server. При этом во время архивирования он должен подключаться, а по окончании отключаться.
3. Архивы должны создавать раз в день/неделю/месяц (тут я добавил от себя, архивы будут хранится с одной ротацией)
Для написания был выбран perl и в итоге получился вот такой скрипт:
#########################################################################################
# Created: Zakharchenko Andrey Ruslanovich
# Date: 2010.01.20
# Description: Скрипт скрипт создания архива конфигурационных файлов
#########################################################################################
#--- основные переменные
$dst = '/var/files/backup_nt/GW-01';
$dst_local = '/var/files/backup/config';
$mount_path = '/var/files/backup_nt';
chop($hostname = `hostname`);
($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime(time);
$year += 1900;
$mon += 1;
#--- преобразовываем формат даты с 1 на 01
sub setformatnumber {
if ($_[0] < 10 ) { return '0'.$_[0] }
else { return $_[0] }
}
#--- проверка подмонтирования директории для архивов
if (!`df -Hac | grep backup_nt`) {
system("mount $mount_path")
}
#--- проверяем на всякий случай доступность пути
if ( -d $dst ) {
#--- создаем список что архивировать
open(list,"/root/list/backup_list");
while($in=<list>) {
$in=~s/\s$//;
$what_backup=$what_backup." ".$in;
}
#--- создаем дневной архив
$to_backup = "$dst/day/$year-".setformatnumber($mon)."-".setformatnumber($mday).".day.$hostname.backup.config.tar.bz2";
system("/usr/bin/tar jvcf $to_backup $what_backup");
#--- удаляем старые дневные архивы
$rm_backup = "$dst/day/$year-".setformatnumber($mon)."-".setformatnumber($mday-2).".day.$hostname.backup.config.tar.bz2";
if ( -e $rm_backup) {
system ("/bin/rm -f $rm_backup");
}
#--- создаем бак за месяц
if ($mday eq 1 ) {
$to_backup = "$dst/month/$year-".setformatnumber($mon)."-".setformatnumber($mday).".month.$hostname.backup.config.tar.bz2";
system("/usr/bin/tar jvcf $to_backup $what_backup");
#--- удаляем старые месячные архивы
$rm_backup = "$dst/month/$year-".setformatnumber($mon-2)."-".setformatnumber($mday).".day.$hostname.backup.config.tar.bz2";
if ( -e $rm_backup ) {
system ("/bin/rm -f $rm_backup");
}
}
#--- создаем недельный архив
if ((localtime(time))[6] eq 1 ) {
$to_backup = "$dst/week/$year-".setformatnumber($mon)."-".setformatnumber($mday).".week.$hostname.backup.config.tar.bz2";
system("/usr/bin/tar jvcf $to_backup $what_backup");
#--- удаляем старые недельные архивы
$rm_backup = "$dst/week/$year-".setformatnumber($mon)."-".setformatnumber($mday-14).".week.$hostname.backup.config.tar.bz2";
if ( -e $rm_backup ) {
system ("/bin/rm -f $rm_backup");
}
}
}
#--- после завершения бекапа отмонтируем директорию
if (`df -Hac | grep backup_nt`) {
system("umount $mount_path")
}
Файл /root/list/backup_list выглядит следующим образом:
/boot
/etc
/root
/usr/local/etc
/var/named
/var/cron/tabs/root
[root@gw-01 bin]#

.gif)
