Автоматизація DirectAdmin'а на Python'і

27 Вересня 2009

Місяць назад десь раз в тиждень я заходив в панель ДіректАдміна цього сайту, далі робив бекап, і закачував його собі на комп... Але монотонні дії мене вбивають, тому виділив декілька хвилин часу і написав маленький скриптик, що заходить на сайт, робить бекап, а потім його скачує на комп. Думаю вам він також буде цікавим.

Тож маємо задачу, яка складається з 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()

 
 
 
Роман Хоменко aka PresidentUA
mail/jabber: spirt40@gmail.com