Автоматизация резервных копий, выполненных из сценария удара в Linux правильный путь

Вот решение в Perl. Необходимо сохранить следующий код в файле и выполнить его как сценарий (см. ниже):

#!/usr/bin/perl
$file1 = '/path/to/file1';
$file2 = '/path/to/file2';
open $f1,'<',$file1;
open $f2,'<',$file2;
while(<$f1>){
    ($c1,$c2,$c4,$c5) = (split / /)[0,1,3,4]; #get relevant columns in file 1
    $lines_dictionary{"$c1 $c2 $c4"}="$c5---$_"; #create a hash entry keyed by the relevant columns
}
while(<$f2>){
    ($c1,$c2,$c4,$c5) = (split / /)[0,1,3,4]; #get relevant columns in file 2
    if(exists $lines_dictionary{"$c1 $c2 $c4"}){ #if a line with similar columns was seen in file 1
        ($file1_c5,$file1_line) = split /---/,$lines_dictionary{"$c1 $c2 $c4"}; #parse the hash entry this line in file 1
        if($file1_c5 -ne $c5){ #if column 5 of file 2 doesn't match column 5 of file 1
            print "${file1_line}$_\n"; #we only need one extra newline as the lines read from the files have trailing ones.
        }
    }
}
close $f1;
close $f2;

Используйте любой текстовый редактор, чтобы вставить этот сценарий в файл, изменить $file1 и $file2 переменные для отражения истинных местоположений файлов затем сделайте исполняемый файл сценария путем выполнения:

$ chmod +x /path/to/script

Наконец, назовите сценарий:

$ /path/to/script

Отказ от ответственности

  • Этот код не тестируется
  • Этот код предполагает, что шаблон '---' вряд ли произойдет в 5-м столбце.
  • Этот код предполагает, что строки в файле 1 уникальны (т.е. что каждая строка имеет различную комбинацию "column1 column2 column4"). Если будет несколько строк (не обязательно последовательны) содержащий те же данные в соответствующих столбцах, то сценарий будет использовать последний (самый нижний в файле) этих строк.
3
03.05.2014, 16:31
2 ответа
[115041] Я бы сделал 1 из следующих вещей.

Метод #1 - системные crons

Добавить скрипт резервного копирования в системные crons, а не в реальную пользовательскую запись crontab. Большинство систем поддерживают структуру каталога под [115536]/etc[115537] следующим образом:

Вы можете просто поместить скрипт, который вы хотите запустить с любой частотой в соответствующий каталог.

Section "ServerFlags"
  Option "DontVTSwitch" "on"
EndSection

Метод #2 - пароль минус sudo
Другой подход будет включать установку записи в вашем файле [115538]/etc/sudoers[115539], используя команду [115540]visudo[115541] для его редактирования. Эта запись предоставит доступ без пароля к записи crontab пользователя для этого конкретного сценария. Ваша запись в их кронтабе будет выглядеть следующим образом:

А запись в вашем файле [115542]/etc/sudoers[115543] будет выглядеть следующим образом:

References

xmodmap fix-e-key-for-mac.xmodmap >/dev/null 2>&1
How to run a specific program as root without a password prompt?

5
27.01.2020, 21:12
[115029] Я бы предложил войти в кронтаб root, используя,

Когда вы включите его в качестве первой команды в ваш скрипт, все команды будут выполняться в кронтабе root.

Если вам нужна дополнительная информация, посмотрите на странице [115530]this[115531].

Команды, которые обычно выполняются с административными привилегиями (т.е. они обычно выполняются с помощью sudo) должны быть добавлены в корневой пользовательский crontab (вместо пользовательского crontab)

2
27.01.2020, 21:12

Теги

Похожие вопросы