定时备份与定时通知
定时备份与定时通知
背景:SQL server代理每天通过维护计划自动备份数据库到文件A中(.bak文件),为了避免文件A所在的服务器有异变发生,需要将文件A备份到其他服务器(同一个局域网)中。
工具:1、FreeFileSync(自动同步文件) 2、 钉钉机器人 3、python写脚本发送备份成功与否的消息到钉钉的机器人上 4、window10任务计划程序 5、自动删除脚本.bat(没用上,原本是用来保留七天以内的文件信息,后面通过FreeFileSync筛选解决了)
步骤:
1、使用FreeFileSync备份文件到局域网中的一个服务器中
2、python调用钉钉机器人
3、window10任务计划程序进行定时执行
1、FreeFileSync
需要注意3个地方
第1个,需要另存为批处理作业,在设置的时候勾选最小化运行和自动关闭,在定期执行之后不会弹出其运行页面了。
第2个,筛选,这里可以使用其功能进行保留哪一些文件或者哪一些日期进行备份;我使用的是时间跨度选择来进行七天以内的进行镜像备份,一开始我想的是全部备份,在通过脚本去删除其余的,但是我发现脚本在访问其他服务器的时候无法进行删除,试了很多操作都没有成功,如有人知道怎么解决的话,我会非常欢迎!
第3个,同步,也就是选你需要的同步类型,有双向同步,有单向镜像copy,也有更新,还可以自定义,这里我使用的是镜像,就是把原文件copy一份到新服务器中。
2、python调用钉钉机器人
python版本: 3.6.8
需要导入 DingtalkChatbot;
钉钉群里自定义机器人,消息推送开启,记住WebHook、加签密钥(可选)和自定义关键字(这很重要,在消息发送的时候需要存在自定义的关键字)
完成在钉钉群里添加自定义机器人步骤即可。
接下来就是使用python来完成备份成功与否的判定,并且发送至钉钉。效果图如下:
import os
import datetime
from dingtalkchatbot.chatbot import DingtalkChatbot
import re
def check_for_daily_files(folder_path):
today = datetime.date.today()
# target_file_pattern = re.compile(r'^AIS20220708188888.*\.bak$')
target_file_pattern = re.compile(r'^AIS\d+_backup_.*\.bak$') # 匹配类似"A008888-aa.bak"或"A008888-123.bak"的文件名
# target_file_pattern = re.compile(r"A008888-(?:\d+|aa)\.bak") # 匹配类似"A008888-aa.bak"或"A008888-123.bak"的文件名
found_daily_files = 0 # 用于追踪当天符合条件的文件数量
found_sum_files = 0 # 用于追踪文件数量
for root, dirs, files in os.walk(folder_path):
for file in files:
file_path = os.path.join(root, file)
if target_file_pattern.match(file) and datetime.datetime.fromtimestamp(os.path.getmtime(file_path)).date() == today:
found_daily_files += 1
if target_file_pattern.match(file) :
found_sum_files += 1
if found_daily_files >= 1:
message = "定时推送:备份成功!" + "日期为“"+ str(today) + "”的文件备份成功!"
# message = "备份提醒:备份成功!" + "文件夹存在 "+ str(found_sum_files) + " 个文件"
xiaoding.send_text(msg= message,is_at_all = False)
else:
message = "定时推送:备份失败!" + "日期为“"+ str(today) + "”的文件备份失败!"
xiaoding.send_text(msg= message,is_at_all = True)
# message = "备份提醒:备份失败!" + "文件夹存在 "+ str(found_sum_files) + " 个文件"
if __name__ == "__main__":
WEBHOOK_URL = "前面说到的Webhook"
secret = "前面说到的加签" # 可选:创建机器人勾选“加签”选项时使用
xiaoding = DingtalkChatbot(WEBHOOK_URL,secret) # 方式一:通常初始化方式
path_to_watch = "需要监测的文件夹"
#测试
if os.path.exists(path_to_watch):
print("exists")
else:
print("not")
check_for_daily_files(path_to_watch)
3、window10任务计划程序进行定时执行
上面说到使用FreeFileSync生成的批处理作业,还有python的文件。接下来我们使用window的任务计划程序进行定时执行。
一直往下走,按照自己的需求选择,到最后选择程序或脚本的时候,(根据需求)把我们之前写的批处理作业和py文件放进去,就大功告成了。
That is all.
此外,我还遇到一个问题就是配置特定文件只对局域网内的特定用户进行开放(A电脑中的文件A只能让B电脑去访问)。
连接如下:
https://www.cnblogs.com/BambooDoorSay/p/17965591