Главная > Программирование, Работа > Скрипт создания архива конфигурационных файлов FreeBSD сервера

Скрипт создания архива конфигурационных файлов FreeBSD сервера

Продолжаю автоматизировать работу сервера. В этот раз руки коснулись автоматизации создания архива с конфигурационными файлами. При этом задачи были поставлены следующие:
1. Пути для архивации должны лежать в отдельном файле.
2. Архивироваться должен на сетевой ресурс расшаренный под Windows Server. При этом во время архивирования он должен подключаться, а по окончании отключаться.
3. Архивы должны создавать раз в день/неделю/месяц (тут я добавил от себя, архивы будут хранится с одной ротацией)

Для написания был выбран perl и в итоге получился вот такой скрипт:

#!/usr/bin/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 выглядит следующим образом:

[root@gw-01 bin]# cat /root/list/backup_list
/boot
/etc
/root
/usr/local/etc
/var/named
/var/cron/tabs/root
[root@gw-01 bin]#
  1. Пока что нет комментариев.
  1. Пока что нет уведомлений.