Решил проделать этап резервного копирования “данных” на ftp сервер. Для этого был выбран метод решения с помощью – powershell.
Сделать бекап и отправить его на ftp не составило труда. Но контролировать данный процесс ежедневно (создался ли, выгрузился или произошла ошибка) нет возможности, да и не уследишь. Поэтому необходим ежедневный отчет, получился следующий скрипт, который уведомляет на почту про результат выполения.
С помощью try/catch удалось сделать следующий механизм. Выполняется try, если в нем возникает ошибка переходит в catch (Exception) и отправляется письмо с текстом ошибки.
Если ошибок не было, отправляется уведомление с успешным выполнением задачи.
try{
#Получаем текущую дату
$date = get-date
$foldername = $date.toshortdatestring()
#Делаем компрессию для zip
Add-Type -assembly ‘System.IO.Compression’
Add-Type -assembly ‘System.IO.Compression.FileSystem’
#СОЗДАЕМ АРХИВ ИЗ ДИРЕКТОРИИ D:\test\1c и складываем в директорию D:\Archive c текущей датой
$Zip=”D:\Archive\$foldername.zip”
[System.IO.Compression.ZipFile]::CreateFromDirectory(“D:\test\1c”,$Zip)
#Указываем локальную директорию и подключаемся к ftp
$localdir = “D:\Archive\”
$ftp = “ftp://ipaddr/dir/”
$user = “ftpuser_ftp”
$pass = “userpass”
$webclient = New-Object System.Net.WebClient
$webclient.Credentials = New-Object System.Net.NetworkCredential($user,$pass)
#Перебираем весь масив данных и загружаем его
foreach($item in (dir $localdir “*”)) {
“Uploading $item…”
$uri = New-Object System.Uri($ftp+$item.Name)
$webclient.UploadFile($uri, $item.FullName)
}
#Адрес сервера SMTP для отправки
$serverSmtp = “smtp.gmail.com”
#Порт сервера
$port = 587
#От кого
#Кому
#Тема письма
$subject = “Бекап успешно создан”
#Логин и пароль от ящики с которого отправляете [email protected]
$pass = “infopass”
$mes = New-Object System.Net.Mail.MailMessage
#Формируем данные для отправки
$mes.From = $from
$mes.To.Add($to)
$mes.Subject = $subject
$mes.IsBodyHTML = $true
$mes.Body = “Бекап создан и отправлен на ftp успешно”
#Создаем экземпляр класса подключения к SMTP серверу
$smtp = New-Object Net.Mail.SmtpClient($serverSmtp, $port)
#Сервер использует SSL
$smtp.EnableSSL = $true
#Создаем экземпляр класса для авторизации на сервере gmail
$smtp.Credentials = New-Object System.Net.NetworkCredential($user, $pass);
#Отправляем письмо, освобождаем память
$smtp.Send($mes)
#При успешной загрузке удаляем данные с сервера, созданный архив и выгруженный бекап с sql
Remove-Item D:\Archive\* -Recurse
Remove-Item D:\test\1c\* -Recurse
exit 1
}
#Выполняется при ошибке в try
catch [Exception] {
#Адрес сервера SMTP для отправки
$serverSmtp = “smtp.gmail.com”
$port = 587
$subject = “Ошибка – бекапа”
#Логин и пароль от ящики с которого отправляете gmail
$pass = “infopass”
$mes = New-Object System.Net.Mail.MailMessage
$mes.From = $from
$mes.To.Add($to)
$mes.Subject = $subject
$mes.IsBodyHTML = $true
#Формируем данные об ошибке
$mes.Body = “Exception Title: ” + $_.Exception.GetType().FullName + “`r`n`r`n” + “Exception Details:” + $_.Exception.Message
$smtp = New-Object Net.Mail.SmtpClient($serverSmtp, $port)
$smtp.EnableSSL = $true
$smtp.Credentials = New-Object System.Net.NetworkCredential($user, $pass);
$smtp.Send($mes)
exit 1
Remove-Item D:\Archive\* -Recurse
}
return 0
: Uncaught Error: Call to undefined function wp_related_posts() in /home2/netconfi/public_html/wp-content/themes/theme/single.php:56
Stack trace:
#0 /home2/netconfi/public_html/wp-includes/template-loader.php(106): include()
#1 /home2/netconfi/public_html/wp-blog-header.php(19): require_once('/home2/netconfi...')
#2 /home2/netconfi/public_html/index.php(17): require('/home2/netconfi...')
#3 {main}
thrown in