Быстрый в изучении - мощный в программировании
>> Telegram ЧАТ для Python Программистов

Свободное общение и помощь советом и решением проблем с кодом! Заходите в наш TELEGRAM ЧАТ!

>> Python Форум Помощи!

Мы создали форум где отвечаем на все вопросы связанные с языком программирования Python. Ждем вас там!

>> Python Канал в Telegram

Обучающие статьи, видео и новости из мира Python. Подпишитесь на наш TELEGRAM КАНАЛ!

E-mail и backup

E-mail и backup

В этом материале мы рассмотрим основные возможности python полезные системному администратору. Естественно, многие скажут, что зачем тут нужен Python, если можно сделать все значительно проще написав несложный bash-скрипт. Однако, Python открывает нам широкие возможности для последующего улучшения скрипта, а заодно можно посмотреть, что он умеет в работе с электронной почтой.

Для чего мне это нужно? Есть у меня один проект, он еще молодой, в сети недавно, пока не раскручен, только начинается формирование клиентской базы. Запущен он на VDS среднего качества, и хостер не самый лучший. Недавно случился какой-то сбой у моей VDS-ки, восстановление оказалось невозможным, в результате навсегда потерялись данные нескольких клиентов.

Проект этот коммерческий, поэтому данные терять никак нельзя. Поэтому было решено создать систему автоматического создания резервных копий. Хоть делаю я это уже не первый раз, все же не хочется перечитывать все эти руководства, лучше изобрету свой велосипед.

Итак, что нам нужно: скрипт должен уметь создавать архив папки с файлами (медиа), бэкапить базу данных и делать ее архив, затем отправлять все это мне на почту, указывая тему и дату.

Вот комментированный исходный код скрипта:

# -*- coding: utf-8
import os
import time
 
from smtplib import SMTP
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
from email.MIMEBase import MIMEBase
from email import Encoders
 
# от кого и кому отправлять 
fromaddr = "from@rambler.ru"
toaddr = "to@yandex.ru"
 
# дамп БД и медиафайлы сжимаем в файл buckup.tar.gz
os.system("mysqldump -u [пользователь] --password=[пароль] [БД] [таблица1] [таблица2]> dump.sql")
os.system("tar -zcf backup.tar.gz dump.sql [путь к каталогу с медиа файлами]")
 
# создаем почтовое сообщение
msg = MIMEMultipart()
 
# заполняем поля отправителя, адресата и тему сообщения
msg['From'] = fromaddr
msg['To'] = toaddr
msg['Subject'] = 'backup '+time.asctime()
 
# текстовая часть сообщения (не забываем указать кодировку)
msg.attach(MIMEText("Текстовое вложение", "plain", "utf-8"))
 
# прикрепляем файл backup.tar.gz к почтовому сообщению
att = MIMEBase('application', 'octet-stream')
att.set_payload(open("backup.tar.gz", "rb").read())
Encoders.encode_base64(att)
att.add_header('Content-Disposition', 'attachment; filename="backup.tar.gz"')
msg.attach(att)
 
# соединяемся с почтовым сервером и выполняем авторизацию
server = SMTP('mail.rambler.ru', 587)
server.ehlo()
server.starttls()
server.ehlo()
server.login("почтовый логин", "пароль")
 
# отправляем сформированное сообщение, после чего выходим
server.sendmail(fromaddr, toaddr, msg.as_string())
server.quit()

Осталось поставить крипт в cron и расслабиться.

Способ довольно легкий, но благодаря ему можно сохранить много времени и нервов, если случится подобная неприятная ситуация. Естественно, чтобы все работала стабильно, необходимо еще внести в скрипт конструкцию try…except. И если не получилось отправить письмо, то спустя определённое время должна совершаться повторная отправка.

А если вам нужны драйверы для какого-либо устройства, то заходите на сайт http://www.helpjet.net/. Сервис удобен тем, что все драйверы распределены по производителям и категориям устройств, поэтому поиск нужного не займет много времени. Все драйверы постоянно обновляются, поэтому данные всегда актуальные.

Комментариев: 1
  1. Прекрасный код :)