簡單備份檔案併發送到指定郵箱

2021-09-16 14:23:10 字數 3141 閱讀 2543

一哥們發了個訴求,總覺得自己的伺服器不安全,想搞個定時備份檔案併發送到自己的郵箱

# -*- coding: utf-8 -*-

from __future__ import absolute_import, unicode_literals

import os

import datetime

import logging

import logging.config

from email.mime.multipart import mimemultipart

from email.mime.text import mimetext

from email.header import header

import smtplib

name = datetime.datetime.now().strftime("%y%m%d%h%m%s")

base_path = '/root/***x/temp'

zip_path = '/root/***x/backup/{}.tar.bz2'.format(name)

def set_logging():

""""""

log_dir, log_file = '/root/***x/logs', '/root/***x/logs/backup.log'

if not os.path.exists(log_dir):

os.mkdir(log_dir)

if not os.path.exists(log_file):

open(log_file, 'w')

default_logging =

},'handlers': ,

},'loggers': ,}}

logging.config.dictconfig(default_logging)

def zip_files():

"""zip files"""

os.system('tar -cjf {} -c {} data'.format(zip_path, base_path))

def sendmail():

"""send mail"""

set_logging()

zip_files()

logger = logging.getlogger('backup')

mail_from, password = '******[email protected]', '******x'

mail_to = '***[email protected]'

smtp_server = 'smtp.aliyun.com'

msgroot = mimemultipart('related')

msgroot['subject'] = 'send backup files {}'.format(name)

msgroot['from'] = '{}<{}>'.format(header('backup', 'utf-8'), mail_from)

msgroot['to'] = mail_to

msgtext = mimetext('backup files', 'plain', 'utf-8')

msgroot.attach(msgtext)

zip_con.add_header('content-disposition', 'attachment',

filename='{}.tar.bz2'.format(name))

msgroot.attach(zip_con)

try:

server = smtplib.smtp_ssl(smtp_server)

server.login(mail_from, password)

server.sendmail(mail_from, mail_to, msgroot.as_string())

server.quit()

logger.info('send {} backup files success'.format(name))

except exception, e:

logger.error('send {} failed {}'.format(name, e))

sendmail()

if __name__ == '__main__':

sendmail()

這個實現比較初級,直接用 shell 命令進行打包

def zip_files():

"""zip files"""

os.system('tar -cjf {} -c {} data'.format(zip_path, base_path))

這個就不說了,現成的模組直接拿來用

加上日誌,可以很清楚的讓我知道傳送情況如下,示例如下:

[2017-04-14 00:00:03,251] info : send 20170414000001 backup files success

[2017-04-14 03:00:02,620] info : send 20170414030001 backup files success

[2017-04-14 06:00:02,406] info : send 20170414060001 backup files success

[2017-04-14 09:00:02,349] info : send 20170414090001 backup files success

[2017-04-14 12:00:02,299] info : send 20170414120001 backup files success

[2017-04-14 15:01:04,696] error : send 20170414150001 failed [errno 110] connection timed out

[2017-04-14 15:01:05,401] info : send 20170414150001 backup files success

定時這個處理,直接使用 crontab 命令,建立個 backup_cron 檔案,寫入

0 */3 * * *  python /root/***xx/backup.py
業務比較簡單,實現也比較簡單,沒啥可說的

Linux 備份檔案和資料庫傳送到郵箱

今天乙個誤操作 把乙個月的檔案備份和資料庫備份刪掉了 shock 做了乙個用sendmail傳送到郵箱的備份指令碼 bin bash x sendmail hoodbc20117 setting path backpath data0 mysql bak date bin date y m d h ...

自動生成awr報告併發送到郵箱

兩個主要指令碼 生成48小時內awr報告 oracle rac1 admin cat myawrrpt.sql conn as sysdba set echo off set veri off set feedback off set termout on set heading off varia...

Linux資料夾打包傳送到本地

tar cvf script.tar script sz script.tar 具體 sz rz命令 tar命令 root linux tar cxtzjvfppn 檔案與目錄.引數 c 建立乙個壓縮檔案的引數指令 create的意思 x 解開乙個壓縮檔案的引數指令!t 檢視tarfile裡面的檔案...