Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Автоматически забирать бэкап с хостинга (http://forum.oszone.net/showthread.php?t=319067)

SenatoR_Dmr 23-09-2016 14:01 2671409

Автоматически забирать бэкап с хостинга
 
Доброго времени суток.
На хостинге настроено ежедневное бэкапирование базы данных и самого сайта в отдельную папку на хостинге (backups).
Создан FTP-пользователь с паролем для прямого подключения к папке backups

Нужно настроить еженедельное (по субботам, например) копирование архива сайта и архива с базой данных (2 файла) с хостинга на внутренний сервер. Глубина вложения по схеме:
Должен быть каталог webArchive, внутри еще каталог site, внутри подпапки:
- В папке Year Хранить копию архива каждого 3 января года (т.е. папки ГГГГ_01_03, в которой два архива - база и сайт)
- В папке Month Хранить копию архива 1 числа каждого месяца последние 12 месяцев (т.е. папки с архивами от ГГГГ_01_01 до ГГГГ_12_01)
- В папке Last8Weeks Хранить копию архива последних 8-ми субботних архивов (папки ГГГГ_ММ_ДД с архивами)
При создании каждого из архивов должен приходить отчет на почту об успешном или не успешном копировании файла на сервер

Архивы в папке хостинга лежат в формате:
db_ГГГГ-ММ-ДД.gz
site_ГГГГ-ММ-ДД.tar.gz

Помогите, пожалуйста, как правильно это реализовать, и вообще, возможно ли?

SenatoR_Dmr 24-09-2016 13:02 2671688

Пока сделал такой код в обычном BAT-нике, чтобы он сливал эти два файла в нужную папку с FTP:
Код:

@echo off
::Задаем параметры подключения
set host=ftp.name.nichost.ru
set user=name
set password=pass
set Mainfolder=
set SubFolder=/%date:~6%-%date:~3,2%-%date:~0,2%
set fileMask=*
set LocalFolder=c:\webArchive\site\%date:~6%-%date:~3,2%-%date:~0,2%
 
::Временный файл команд для утилиты FTP.exe
set BackupFTP="%temp%\FTP_Backup.txt"
 
::Генерируем файл FTP команд
> %BackupFTP% (
  echo open %host% %port%
  echo %user%
  echo.%password%
  echo binary
  echo prompt
  echo hash
  md  %LocalFolder%
  echo lcd "%LocalFolder%"
  if "%Mainfolder%" neq "" echo cd "%Mainfolder%"
  if "%SubFolder%" neq "" echo cd "%SubFolder%"
  echo mget %fileMask%
  echo disconnect
  echo quit
)
 
::Добавляем утилиту FTP в исключения брандмауера Windows
netsh firewall add allowedprogram "%windir%\system32\ftp.exe" ENABLE
 
::Запускаем на выполнение пакетник команд FTP
ftp.exe -s:%BackupFTP%
 
::Удаляем пакетник
del /f /q %BackupFTP%
pause

Вопрос: как сделать, чтобы он чекал папки и оставлял последние 8 папок с архивами?

А остальные удалял.

SenatoR_Dmr 25-09-2016 20:26 2672071

Так, это тоже сделал, добавив:
Код:

forfiles /p "C:\webArchive\site" /d -56 /c "cmd /c if /i @isdir equ true rd /q /s @path"
Остались следующие вопросы:
1. Как сделать, чтобы БАТ-ник запускался в "тихом" режиме, не выводя консольное окно?
2. Как реализовать корректную запись лога выполнения БАТ-ника в txt-файл, например:
ВРЕМЯ ГГГГ_ММ_ДД Файл1 успешно/не успешно загружен в ПАПКА Файл2 успешно/не успешно загружен в ПАПКА.
Если не успешно - пишет причину (сбой соединения, невозможность подключения...)
3. Как настроить автоматическую отправку письма на e-mail об успешности/не успешности выполнения БАТ-ника (если какой-то из файлов загружен с ошибкой или не удалось подключиться к FTP - считать выполнение не успешным).


Время: 07:15.

Время: 07:15.
© OSzone.net 2001-