1、实现目标
为保障重要文件和系统数据的持续可用性和安全性,制定如下自动备份及通知机制:
① 定时自动备份
使用 Windows 计划任务配合脚本实现指定目录的定期备份(如每日凌晨 2 点),可支持本地或远程共享路径备份。
② 备份异常通过邮件发送责任人
备份任务执行后,自动检测运行结果,若发生错误,将通过邮件将错误日志和信息发送给对应负责人。
③ 成功与失败均通过邮件通知
使用 Python 脚本根据执行结果自动发送备份成功或失败的状态邮件至指定邮箱
2、windows脚本编写
为实现备份功能,编写批处理脚本(.bat
)或 PowerShell 脚本,实现以下功能:
1、设置源目录和目标备份目录
2、日志记录备份结果
3、python脚本发送邮箱通知
4、附录bat脚本
@echo off
setlocal enabledelayedexpansion
:: === 设置源目录和目标目录 ===
set "SRC=D:\deepseek" :: 要备份的目录,可修改
set "DST=D:\data" :: 备份保存目录,可修改
:: === 设置 WinRAR 路径 ===
set "WINRAR_EXE=C:\Program Files\WinRAR\WinRAR.exe"
:: === 获取当前日期(格式:YYYY-MM-DD) ===
for /f %%i in ('powershell -command "Get-Date -Format yyyy-MM-dd"') do set "TODAY=%%i"
:: === 构建压缩文件路径和日志文件路径 ===
set "RAR_FILE=%DST%\Backup_%TODAY%.rar"
set "LOG_FILE=D:\backup_log.txt"
echo =============================== >> "%LOG_FILE%"
echo [%date% %time%] 开始备份 >> "%LOG_FILE%"
echo 源路径:%SRC% >> "%LOG_FILE%"
echo 目标路径:%RAR_FILE% >> "%LOG_FILE%"
:: === 检查 WinRAR 是否存在 ===
if not exist "%WINRAR_EXE%" (
echo ?? 未找到 WinRAR!请确认路径设置正确:%WINRAR_EXE% >> "%LOG_FILE%"
echo ? 未找到 WinRAR,备份失败。
goto END
)
:: === 执行压缩 ===
"%WINRAR_EXE%" a -r -ep1 "%RAR_FILE%" "%SRC%\*" >> "%LOG_FILE%"
if exist "%RAR_FILE%" (
echo ? 压缩成功:%RAR_FILE% >> "%LOG_FILE%"
echo 备份并压缩完成。
) else (
echo ? 压缩失败,请检查 WinRAR 配置。 >> "%LOG_FILE%"
echo 压缩失败。
)
:END
echo [%date% %time%] 任务完成 >> "%LOG_FILE%"
echo =============================== >> "%LOG_FILE%"
python "D:\deepseek\smp.py"
endlocal
exit /b
3、STMP邮箱设置
为实现邮件通知功能,需配置 SMTP 发信邮箱:
发件人邮箱及授权码设置
4、python脚本邮箱脚本下发备份成功与否通知
1、配置邮箱及授权码
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
from datetime import datetime
# 发件人邮箱账号和授权码
sender_email = '1xx@qq.com'
sender_password = 'komydopzpfrmbaaz'
# 收件人邮箱
receiver_email = '1xxx@qq.com'
current_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
# 邮件主题和内容
subject = '备份完成提醒'
body = f'备份已成功完成,时间为:{current_time}。'
# 创建邮件对象
msg = MIMEText(body, 'plain', 'utf-8')
msg['From'] = formataddr(('备份系统', sender_email))
msg['To'] = formataddr(('收件人', receiver_email))
msg['Subject'] = subject
try:
# 连接 SMTP 服务器
server = smtplib.SMTP_SSL('smtp.qq.com', 465)
server.login(sender_email, sender_password)
# 发送邮件
server.sendmail(sender_email, [receiver_email], msg.as_string())
print('邮件发送成功')
except Exception as e:
print(f'邮件发送失败: {e}')
finally:
# 关闭连接
server.quit()
5、定时任务设置
使用 Windows 任务计划程序 配置脚本每日定时执行:
-
执行脚本路径(.bat )
-
设置触发条件:每日固定时间