Поиск

Газета FOSS News

16 ноября 2011

О газете
Архив
Авторам
Рекламодателям

 

Кабинет читателя

Вход в систему
Введите имя пользователя и пароль для входа в систему:

4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4

Быстрый и простой бэкап

18.05.10 /

В этой статье будет представлен скрипт, который делает резервные копии папок. В своей работе он использует файлы crontab и newsyslog.conf.

Скрипт будет создавать архивы такого плана backup.tar.0.bz2, backup.tar.1.bz2... Чтобы иметь возможность восстановить из бэкапа, нужно переименовать файл backup.tar.0.bz2 в, например, такой backup.tar.bz2. Каждый архив будет складываться в свою архивную папку.

Пару слов скажу о самом скрипте. Написан он на языке perl и не использует никаких специфических модулей, поэтому должен работать на всех системах, где имеется интерпретатор perl.

Ниже приведу параметры запуска скрипта (запускать нужно от пользователя root):

- разрешаем бэкапирование (на самом деле в файлы crontab, newsyslog.conf добавляются соответствующие строчки для бэкапа)

#/scripts/backup.pl -e

- запрещаем бэкапирование (соответственно удаляются строчки)

#/scripts/backup.pl -e

- делаем бэкап

#/scripts/backup.pl -b

Теперь кратко, о настройках. Они расположены в самом скрипте и меняются там же. И так:

$path_backup - путь, где будут храниться бэкапы

%backup_dirs - массив пар: папка и название архива, которые нужно бэкапить

$cron_file - путь к файлу crontab (по умолчанию /etc/crontab)

$newsyslog_file - путь к файлу newsyslog.conf (по умолчанию /etc/newsyslog.conf)

$cron_str - параметры создания архива (в формате crontab: время, дата, команда)

$newsyslog_str - ротациия архивов (в формате newsyslog.conf)

А вот и сам скрипт:

#!/usr/bin/perl

use Switch;

#path to backup
my $path_backup='/var/backups';

#dirs, that need backup in next format:
#name, path
my %backup_dirs = (
    'etc' => '/etc',
    'usr_local_etc' => '/usr/local/etc'
);

#path to crontab, newsyslog.conf
my $cron_file='/tmp/crontab';
my $newsyslog_file='/tmp/newsyslog.conf';

#settings for backup
my $cron_str="0 23 * * * root /scripts/backup.pl -b";
my $newsyslog_str=$path_backup."/*/*.tar 644 5 * T00 JGN";

if ($#ARGV == 0) {

    switch ($ARGV[0]) {
        case "-e" {
            open F,'>>'.$cron_file;
            print F $cron_str."\n";
            close F;

            open F,'>>'.$newsyslog_file;
            print F $newsyslog_str."\n";
            close F;
        }

        case "-d" {
            del_str($cron_file,$cron_str);
            del_str($newsyslog_file,$newsyslog_str);
        }

        case "-b" {

            foreach $backup_dirs (keys %backup_dirs){
                system "/bin/rm -f $path_backup/$backup_dirs/$backup_dirs.tar";
                system "cd $backup_dirs{$backup_dirs};/usr/bin/tar cf $path_backup/$backup_dirs/$backup_dirs.tar ./*";
            }

        }

        else {
            error_use;
        }

    }

}
else {
    error_use;
}

exit 0;

sub error_use();
{
    print "Error in use \n";
    print "use: backup.pl -e|d|b \n ";
    print "\t -e : enable \n";
    print "\t -d : disable \n";
    print "\t -b : backup \n";
    exit 1;
}

sub good_str
{
    my $str = shift;
    $str=~ s[\s][\\s]g;
    $str=~ s[\*][\\*]g;
    return $str;
}

sub del_str
{
    my($file, $str) = @_;
    open F, $file; @f=<F>; close F;
    open F, '>'.$file;
    $str=good_str($str);

    foreach $str_str (@f) {
        print F $str_str if $str_str !~ m%^$str$%;
    }

    close F;
}

Примечание:

Очень важно, чтобы в строчках  $cron_str и  $newsyslog_str использовались не табуляция, а пробелы. В противном случае скрипт не сможет удалять строчки из файлов  crontab и  newsyslog.conf.


Автор: skeletor

По материалам:

root.ua

Loading ...

Комментарии

Добавить комментарий

* - необходимое для заполнения поле

*




Изображение CAPTCHA для предотвращения спама
Если слово непонятно, нажмите здесь..
*
*
Lurraine, 19-01-12 15:10:
At last, someone comes up with the "right" anwesr!
 
© 2004-2009 Журнал "Root UA" - свидетельство СМИ: КВ №14786-3757Р
Газета "FOSS News" - свидетельство СМИ: ОД №1355-236-Р
При использовании материалов портала ссылка на Root.UA обязательна, для интернет-изданий – гиперссылка, не закрытая для индексации поисковыми системами.

sitenews