Місяць назад десь раз в тиждень я заходив в панель ДіректАдміна цього сайту, далі робив бекап, і закачував його собі на комп... Але монотонні дії мене вбивають, тому виділив декілька хвилин часу і написав маленький скриптик, що заходить на сайт, робить бекап, а потім його скачує на комп. Думаю вам він також буде цікавим.
Тож маємо задачу, яка складається з 2-м частин. По-перше, нам потрібно в ДіректАдміні створити бекап. А по-друге, нам потрібно цей бекап по ФТП забрати на комп. І між ціми двома операціями потрібно зачекати хвилин з 30. Хоча зазвичай досить і 5 хвилин, але хай буде трішки більше.
import time
make_backup()
time.sleep(60*30)# = 30m
get_backup()
Тепер напишемо першу функцію - make_backup(). Для її реалізації скористаємося бібліотекою Twill http://twill.idyll.org/. Взагалі-то ця бібліотека частіше використовується для тестування, але ми її заюзаємо для сворення бекапу.
from twill.commands import *
def make_backup():
#перейдемо на DirectAdmin
go("http://tutamc.com:2222/")
#введемо логин і пароль
fv("1", "username", "tutamc")
fv("1", "password", "пароль")
#відправимо форму
submit()
#перейдемо на стрінку створення бекапу
go('/CMD_SITE_BACKUP?domain=tutamc.com')
#кажемо, що ми натиснули кнопку "відправити"
fv(1,14,'ok')
#відправляємо форму
submit()
#перевіряємо чи все окей
code(200)
Тепер все заберемо бекап з FTP:
def get_backup():
#авторизуємося на ФТП
ftp = FTP('193.9.28.13')
ftp.login('tutamc','пароль','')
#отримуємо список файлів директорії з бекапами
file_list = ftp.nlst('/backups')
#з першого файлу дістаємо ім'я
first = file_list[0]
first_name = first.split('/')[2]
#закачуємо перший файл на комп
ftp.retrbinary('RETR '+first, open('d:\\\\TutaMC\\'+first_name, 'wb').write)
#інші бекапи видаляємо
for item in file_list[1:-2]:
ftp.delete(item)
ftp.quit()
Тепер все це можна встановити на автоматичний запуск годин так в 3 ночі, і завжди мати останні бекапи сайту. В мене взагалі вночі комп більше працює, чим вдень. І я буду потроху викладати для вас скрипти, що полегшують життя ;).
В цілому вигляді скрипт такий:
import time
from twill.commands import *
from ftplib import FTP
def make_backup():
go("http://tutamc.com:2222/")
fv("1", "username", "tutamc")
fv("1", "password", "пароль")
submit()
go('/CMD_SITE_BACKUP?domain=tutamc.com')
fv(1,14,'ok')
submit()
code(200)
def get_backup():
ftp = FTP('193.9.28.13')
ftp.login('tutamc','пароль','')
file_list = ftp.nlst('/backups')
first = file_list[0]
first_name = first.split('/')[2]
ftp.retrbinary('RETR '+first, open('d:\\\\TutaMC\\'+first_name, 'wb').write)
for item in file_list[1:-2]:
ftp.delete(item)
ftp.quit()
make_backup()
time.sleep(60*30)# = 30m
get_backup()
