Для этого скрипта у меня есть 3 файла. Один — сам скрипт, который запускается. Это файл .PL. Следующий файл — конфигурационный файл. Он хранит конфигурации для скрипта, такие как местоположение резервных копий, пароли и т.д. Последний файл — это список микротиков и имя резервной копии в формате IP:Имя. Пример: 192.168.1.1:TestBackup В файле .PL есть 3 дополнительных Perl-модуля, которые нужно установить в Perl, чтобы скрипт работал. Я использовал Perl Packet Manager (PPM) для их установки. Они перечислены в начале файла. В этом файле нужно внести две модификации. Внизу есть строка, в которой сказано ввести имя почтового сервера и адрес отправителя. Вам нужно ввести имя вашего почтового сервера и адрес электронной почты для отправки сообщения.
Начало файла .PL
#!/usr/bin/perl
#########################################################################################
#
# Микротик Backup Script 3-15-05
# Написано: Phillip Hutchison
#
#########################################################################################
#Этот скрипт требует установки следующих Perl-модулей на машине, на которой он запускается.
use Net::Telnet;
use Net::FTP;
use Mail::Sendmail;
# переменные пользователя
# Находятся в файле Backups.cfg.
# Код начинается здесь
sub email;
$count = 1;
($Second, $Minute, $Hour, $Day, $Month, $Year, $WeekDay, $DayOfYear, $IsDST) = localtime(time);
$RealMonth = $Month + 1;
if($RealMonth < 10)
{
$RealMonth = "0" . $RealMonth; # добавление ведущего нуля к однозначным месяцам
}
if($Day < 10)
{
$Day = "0" . $Day; # добавление ведущего нуля к однозначным дням
}
$Fixed_Year = $Year + 1900;
open(CFG, "Backups.cfg") or (print "Невозможно открыть конфигурационный файл\n");
while($line = <CFG>)
{
if($line =~ /#.*/)
{
}
else
{
if($line =~ /UN::/i)
{
($junk,$username) = split("::",$line);
chomp $username;
#print "$username\n";
}
if($line =~ /PW::/i)
{
($junk,$password) = split("::",$line);
chomp $password;
#print "$password\n";
}
if($line =~ /Email::/i)
{
($junk,$Email) = split("::",$line);
chomp $Email;
#print "$Email\n";
}
if($line =~ /ListFile::/i)
{
($junk,$LF) = split("::",$line);
chomp $LF;
#print "$LF\n";
}
if($line =~ /Dir::/i)
{
($junk,$DIR) = split("::",$line);
chomp $DIR;
#print "$DIR\n";
}
if($line =~ /Log::/i)
{
($junk,$Log) = split("::",$line);
chomp $Log;
#print "$Log\n";
}
}
}
close(CFG);
open(FH, $LF) or (print logfile "Невозможно открыть файл списка\n");
open(logfile, ">>$Log");
print logfile "$RealMonth/$Day/$Fixed_Year\n\n";
$i = 0;
while($line = <FH>)
{
if(($line =~ /^#.*/)||($line =~ /^\s$/))
{
}
else
{
$i = $i + 1;
($IP, $Name) = split(":", $line);
chomp($Name);
print logfile $i . " - ";
$t = new Net::Telnet ( Timeout=>30, Errmode=>'return');
print "$count\n";
$count++;
if($t->open($IP))
{
print "open $IP - Telnet\n";
$t->login($username, $password);
#print "@output\n";
#print "logged in\n";
$cmd = "system backup save name ".$Name;
#print "$cmd\n";
$t->print($cmd);
sleep(1);
@output = $t->waitfor('/.*>/i');
print logfile " @output\n";
$t->print('quit');
$fullfile = $Name.".backup";
$Lfullfile = $DIR.$fullfile;
$F = Net::FTP->new($IP);
if($F)
{
print "open $IP - FTP\n";
$F->login($username, $password);
$F->binary;
$F->get($fullfile,$Lfullfile) or print logfile "Невозможно получить $fullfile\n";
$F->quit;
print logfile $i . " - ";
print logfile $IP . " - ";
print logfile "OK\n";
sleep(3);
print "OK\n";
}
else
{
print logfile " FTP Error - $IP\n";
print "Error\n";
email("FTP", $IP, $Email);
}
}
else
{
print logfile "\n" . $i . " - " . $IP . " - Failed\n";
print "Error\n";
email("Telnet", $IP, $Email);
}
}
}
close(FH);
close(logfile);
sub email {
use strict 'refs';
my($refa, $refb, $Mailadd) = @_;
$Body = "$refa failed for $refb";
print "$Mailadd\n";
%mail = (
To => $Mailadd, From => 'enter from address here', Subject => 'Mikrotik Backup Failed', Message => $Body
);
$mail{Smtp} = 'enter your mail server here';
if(sendmail %mail) {print logfile "mail sent\n";}
else {print logfile "Error sending mail. $Mail::Sendmail::error \n";}
print "\n\$Mail::Sendmail::Log says: \n", $Mail::Sendmail::log;
} END .PL Файл Следующий файл — это файл .cfg. Он называется Backups.cfg и находится в той же директории, что и .pl файл.
Начало файла .cfg
#Этот файл содержит информацию о конфигурации для скрипта резервного копирования
#Микротик. Строки, которые пусты или начинаются с #, будут игнорироваться скриптом.
#Имя пользователя и пароль для входа в Микротик.
UN::admin
PW::enter your password here
#Адрес электронной почты для отправки уведомлений об ошибках.
Email::enter your email here
#Имя файла списка, содержащего IP-адреса и имена резервных копий Микротиков.
#Формат файла списка: xxx.xxx.xxx.xxx:Имя.
ListFile::list.txt
#Директория, в которой будут храниться файлы резервных копий
Dir:

:\mikrotik\backups\
#Имя файла журнала
Log::backuplog.txt Конец файла .cfg
Последний файл — это текстовый файл, который называется List.txt. Вы можете заметить, что его можно изменить в файле .cfg, если хотите другое имя. Это список IP-адресов и имен резервных копий, которые будут созданы и FTP обратно в указанное место в файле .cfg. Следующие примеры, вам нужно будет заменить их своими значениями. Вы можете перечислить столько комбинаций IP и имени, сколько хотите. Просто введите каждый микротик на новой строке.
Начало файла .txt
#список IP-адресов роутеров и имена
192.168.0.1:testbackup1
172.16.1.1:testbackup2 Если у вас есть какие-либо вопросы, просто спросите, и я постараюсь помочь вам с ними.