菜鸟笔记
提升您的技术认知

python定时备份为知笔记数据-ag真人游戏

前两篇文章讲解了python的定时任务框架apscheduler基础用法和为知笔记的部署。

今天讲一下如何让服务器定时备份数据。

为了防止意外,数据最好是每天都备份,并且最好备份到另外的硬盘上(可以买一块云硬盘,挂载到服务器上(我是在腾讯云做活动买的,15块钱买了100g3年))。

但是每天都人工备份的话,可行性较低。所以计划用apscheduler框架定时触发备份任务。

任务目标:

1、每隔2小时定时备份为知笔记的文件目录数据

2、发送备份成功还是失败的结果

先看效果图:

步骤:

1、新建一个文件pybak_1.py,用于触发备份命令。

import os
import time
import smtplib
from email.mime.text import mimetext
from email.mime.multipart import mimemultipart
from email.utils import formataddr
import sys
def mail_sender(info_msg, to_mail):
    # 定义邮件
    my_sender = '[email protected]' #发送邮箱,这里是以qq邮箱为例
    my_pass = 'xxxxxxxxxxxx'  # 这个授权码,是在qq邮箱里账户设置里设置的三方授权码。用pop3,就是python脚本中登录邮箱时的密码,而不是你平时登录邮箱时的那个密码
    receiver = [formataddr(('cx', to_mail))]
    server = smtplib.smtp_ssl("smtp.qq.com", 465)
    # 设置邮件内容
    # mimemultipart类可以放任何内容
    msg = mimemultipart()
    content = info_msg
    # 把内容加进去
    msg.attach(mimetext(content, 'plain', 'utf-8'))
    # 设置邮件主题
    msg['subject'] = info_msg
    server.login(my_sender, my_pass)
    server.sendmail(my_sender, receiver, msg.as_string())
    server.quit()
source = ['/data/wizdata/'] # 为知笔记所在的目录
target_dir = '/data1/wiz_bak/' # 要备份到哪里
today = target_dir   time.strftime('%y%m%d')
now = time.strftime('%h%m%s')
if not os.path.exists(today):
    os.mkdir(today)
    print('successfully created directory'), today
target = today   os.sep   now   '.zip'
zip_command = "zip -qr '%s' %s" % (target, ' '.join(source))
print(zip_command)
suc_msg = 'wiz笔记备份成功'   time.strftime('%y%m%d%h%m')
error_msg = 'wiz笔记备份失败'   time.strftime('%y%m%d%h%m')
try:
    if os.system(zip_command) == 0:
        print('successful backup to', target)
        mail_sender(suc_msg, '[email protected]') # 这里改成接受邮箱
    else:
        print('failed backup to', target)
        mail_sender(error_msg, '[email protected]') # 这里改成接受邮箱
except:
    print("备份失败")
    print(sys.exc_info())
    mail_sender(error_msg, '[email protected]') # 这里改成接受邮箱

这里做了几件事:

1.1、定义了一个发送邮件的函数

1.2、用python执行备份命令

1.3、触发备份命令,并发送邮件

2、创建apscheduler框架的定时任务文件:t_apscheduler.py

import os
from apscheduler.schedulers.blocking import blockingscheduler
from datetime import datetime, date
# os.system : execute the command in a subshell
def execute():
    os.system('python pybak_1.py')
scheduler = blockingscheduler()
scheduler.add_job(execute, 'interval', hours=2)
# interval-------------minutes,seconds,hours,days
# scheduler.add_job(execute, 'interval', seconds=1)
scheduler.start()

把参数设置成每隔两小时执行一次:hours=2

3、将文件传到服务器上。

4、在服务器上执行命令

sudo nohup python t_apscheduler.py &

5、tail -f 查看执行结果。

6、检验备份文件,并对比被备份的目录。发现一致。

 并且也正常发送了邮件提醒。

目标达成,结束。

网站地图