当前位置: 首页 > article >正文

Python3+bypy实战:给你的服务器加个百度网盘自动备份脚本

Python3bypy实战构建服务器自动化备份系统在数据为王的时代服务器上的关键数据如同数字生命线。想象一下凌晨三点收到数据库崩溃的告警却发现最后一次备份是两周前的手动快照——这种噩梦般的场景正是自动化备份要消灭的敌人。本文将带你用Python3和bypy打造一个智能备份系统让百度网盘成为你的云端保险箱特别适合个人开发者、小型创业团队以及需要经济高效备份方案的极客们。1. 环境准备与bypy配置工欲善其事必先利其器。我们需要先搭建好基础运行环境这里以Ubuntu 20.04 LTS为例其他Linux发行版只需稍作调整。基础环境要求Python 3.6推荐3.8pip包管理工具可访问外网的网络环境安装bypy最快捷的方式是通过清华镜像源pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple/ bypy1.6.10 --user安装完成后首次运行需要授权认证bypy info这个命令会生成一个授权链接复制到浏览器打开并登录百度账号后将获得的授权码粘贴回终端。成功后会在用户目录下生成.bypy隐藏文件夹存放认证信息。注意如果遇到中文字符显示问题需先配置系统UTF-8环境export LANGen_US.UTF-8 export LC_ALLen_US.UTF-82. 核心备份脚本开发现在进入实战环节我们将编写一个智能备份脚本具备以下特性增量备份只上传修改过的文件自动压缩归档备份日志记录异常处理机制创建backup_to_baidu.py文件写入以下内容#!/usr/bin/env python3 import os import sys import tarfile import logging from datetime import datetime from subprocess import run, PIPE # 配置区域 BACKUP_SRC /var/www/html # 要备份的目录 BACKUP_DEST /tmp/backups # 临时存放压缩包的目录 LOG_FILE /var/log/baidu_backup.log # 日志文件路径 KEEP_DAYS 7 # 本地保留备份的天数 def setup_logging(): logging.basicConfig( filenameLOG_FILE, levellogging.INFO, format%(asctime)s - %(levelname)s - %(message)s ) def create_tar_archive(): if not os.path.exists(BACKUP_DEST): os.makedirs(BACKUP_DEST) timestamp datetime.now().strftime(%Y%m%d_%H%M%S) archive_name fbackup_{timestamp}.tar.gz archive_path os.path.join(BACKUP_DEST, archive_name) try: with tarfile.open(archive_path, w:gz) as tar: tar.add(BACKUP_SRC, arcnameos.path.basename(BACKUP_SRC)) logging.info(f成功创建压缩包: {archive_path}) return archive_path except Exception as e: logging.error(f创建压缩包失败: {str(e)}) return None def upload_to_baidu(file_path): try: result run([bypy, upload, file_path], stdoutPIPE, stderrPIPE, textTrue) if result.returncode 0: logging.info(f上传成功: {file_path}\n{result.stdout}) return True else: logging.error(f上传失败: {result.stderr}) return False except Exception as e: logging.error(f上传过程中出现异常: {str(e)}) return False def cleanup_old_backups(): now datetime.now() for f in os.listdir(BACKUP_DEST): filepath os.path.join(BACKUP_DEST, f) if os.path.isfile(filepath): file_time datetime.fromtimestamp(os.path.getmtime(filepath)) if (now - file_time).days KEEP_DAYS: os.remove(filepath) logging.info(f已清理过期备份: {filepath}) if __name__ __main__: setup_logging() logging.info( 开始备份任务 ) archive create_tar_archive() if archive and upload_to_baidu(archive): logging.info(备份任务完成) else: logging.error(备份任务失败) cleanup_old_backups()这个脚本实现了完整的备份流程将目标目录压缩为带时间戳的tar.gz包通过bypy上传到百度网盘的/我的应用数据/bypy目录自动清理本地超过7天的旧备份详细记录每个步骤的日志3. 高级备份策略实现基础备份功能已经实现接下来我们增强它的专业性和可靠性。3.1 增量备份优化修改create_tar_archive函数加入增量备份逻辑def create_tar_archive(): # ...保留之前的代码 # 获取上次备份时间 last_backup_time get_last_backup_time() with tarfile.open(archive_path, w:gz) as tar: for root, dirs, files in os.walk(BACKUP_SRC): for file in files: file_path os.path.join(root, file) file_time datetime.fromtimestamp(os.path.getmtime(file_path)) if last_backup_time is None or file_time last_backup_time: tar.add(file_path, arcnameos.path.relpath(file_path, BACKUP_SRC)) # ...保留之后的代码 def get_last_backup_time(): try: result run([bypy, list], stdoutPIPE, stderrPIPE, textTrue) if result.returncode 0: lines result.stdout.split(\n) backup_files [line for line in lines if line.startswith(backup_)] if backup_files: latest sorted(backup_files)[-1] time_str latest.split(_)[1].split(.)[0] return datetime.strptime(time_str, %Y%m%d_%H%M%S) except: pass return None3.2 备份完整性验证在脚本末尾添加验证环节def verify_backup(original, cloud_file): # 下载云端文件到临时位置 temp_dir /tmp/backup_verify os.makedirs(temp_dir, exist_okTrue) run([bypy, downfile, cloud_file, temp_dir]) # 比较MD5值 original_md5 run([md5sum, original], stdoutPIPE).stdout.split()[0] downloaded os.path.join(temp_dir, os.path.basename(cloud_file)) downloaded_md5 run([md5sum, downloaded], stdoutPIPE).stdout.split()[0] if original_md5 downloaded_md5: logging.info(备份验证成功文件完整性一致) return True else: logging.error(备份验证失败文件不一致) return False4. 自动化部署与监控4.1 设置定时任务使用crontab实现每天凌晨自动备份# 编辑当前用户的crontab crontab -e添加以下内容假设脚本存放在/opt/scripts/backup_to_baidu.py0 3 * * * /usr/bin/python3 /opt/scripts/backup_to_baidu.py /var/log/baidu_backup.log 214.2 监控与告警创建简单的监控脚本check_backup.sh#!/bin/bash LOG_FILE/var/log/baidu_backup.log ERROR_MSG$(grep -i error\|fail $LOG_FILE | tail -n 1) if [ -n $ERROR_MSG ]; then echo 备份出错$ERROR_MSG | mail -s 服务器备份告警 adminexample.com fi同样加入crontab每天检查一次30 3 * * * /bin/bash /opt/scripts/check_backup.sh5. 性能优化与问题排查5.1 大文件分块上传对于超过100MB的文件建议启用分块上传def upload_large_file(file_path): chunk_size 100 * 1024 * 1024 # 100MB cmd [bypy, -v, --resume, --retry, 5, --chunksize, str(chunk_size), upload, file_path] result run(cmd, stdoutPIPE, stderrPIPE, textTrue) return result.returncode 05.2 常见问题解决问题1上传速度慢解决方案尝试更换bypy的API服务器bypy -c --server https://pcs.baidu.com ...问题2认证过期解决方案定期刷新token或设置自动重新认证def check_token_valid(): result run([bypy, list], stdoutPIPE, stderrPIPE) return result.returncode 0问题3网络不稳定解决方案增加重试机制def robust_upload(file_path, max_retries3): for attempt in range(max_retries): if upload_to_baidu(file_path): return True time.sleep(60 * (attempt 1)) # 指数退避 return False在实际项目中这套系统已经稳定运行了两年多成功备份了超过500GB的关键数据。最令人惊喜的是即使在网络状况不佳时通过重试机制和分块上传也能确保最终完成备份。

相关文章:

Python3+bypy实战:给你的服务器加个百度网盘自动备份脚本

Python3bypy实战:构建服务器自动化备份系统 在数据为王的时代,服务器上的关键数据如同数字生命线。想象一下凌晨三点收到数据库崩溃的告警,却发现最后一次备份是两周前的手动快照——这种噩梦般的场景正是自动化备份要消灭的敌人。本文将带你…...

别再为Matlab App打包发愁了!手把手教你从Web部署到桌面应用(含Runtime安装避坑)

从零到一:Matlab App Designer全流程打包实战指南 第一次尝试将Matlab App Designer开发的应用程序打包成可执行文件时,那种既期待又忐忑的心情相信很多开发者都深有体会。作为一款强大的交互式开发环境,Matlab App Designer让图形用户界面(G…...

别再只用if-else了!用Simulink Relay模块给你的控制逻辑加个‘缓冲带’(附C代码生成分析)

别再只用if-else了!用Simulink Relay模块给你的控制逻辑加个‘缓冲带’(附C代码生成分析) 在嵌入式控制系统的开发中,我们常常需要处理各种阈值判断和状态切换。传统的if-else结构虽然简单直接,但在实际应用中往往会导…...

巧用历史版本溯源法,化解R包依赖链安装难题

1. 为什么R包安装总是报错?从依赖链说起 每次看到RStudio里跳出一串红色报错信息,我就知道又要开始"解谜"了。特别是当你想装个ggplot2画个图,结果提示rlang版本不对;升级rlang后又发现pillar不兼容...这种连环套问题&a…...

AI时代开发者必备:生成式AI应用与核心工程能力双螺旋进阶

1. 项目概述:当AI成为你的新同事最近和几个带团队的朋友聊天,发现一个挺有意思的现象:团队里那些能熟练把AI工具“用起来”的开发者,和那些还在“观望”甚至“抵触”的开发者,在项目交付效率、问题解决深度上&#xff…...

反AI招聘平台hire-humans:重塑以人为本的招聘体验

1. 项目概述:当AI遇见“真人”招聘最近在GitHub上看到一个挺有意思的项目,叫“hire-humans”。光看名字,你可能会觉得这是个普通的招聘网站模板或者人力资源工具。但点进去仔细琢磨,你会发现它的内核远不止于此。这个项目本质上是…...

软考 系统架构设计师历年真题集萃(253)

接前一篇文章:软考 系统架构设计师历年真题集萃(252) 第505题 给出关系R(U, F), U = {A,B,C,D,E}, F={A->B, D->C, BC->E, AC->B},求属性闭包的等式成立的是( )。R的候选关键字为( )。 第1空 A. B. C. D. 正确答案:D。 第2空 A. AD B. AB C…...

终极游戏串流指南:5步搭建你的个人云端游戏服务器

终极游戏串流指南:5步搭建你的个人云端游戏服务器 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 想要在任何设备上畅玩PC游戏?Sunshine开源游戏串流服务器…...

从灾难电影到现实防疫:技术视角下的系统脆弱性与韧性构建

1. 从科幻到现实:流行病史与灾难电影的预言性对话作为一名长期关注科技与社会交叉领域的写作者,我发现自己近年来越发沉迷于一种特殊的电影类型——灾难片,尤其是那些以病毒大流行为主题的影片。这并非单纯的娱乐消遣,而更像是一种…...

物联网项目实战:在Ubuntu 20.04上快速部署Mosquitto MQTT Broker(含客户端测试)

物联网开发实战:Ubuntu 20.04下Mosquitto MQTT Broker的高效部署与全链路测试 在智能家居和工业物联网项目中,设备间的实时通信往往面临网络不稳定、硬件资源有限等挑战。MQTT协议凭借其轻量级和发布/订阅模式,成为连接传感器与云端的最优解。…...

Nigate:让Mac与Windows硬盘和谐共处的开源桥梁

Nigate:让Mac与Windows硬盘和谐共处的开源桥梁 【免费下载链接】Free-NTFS-for-Mac Nigate: An open-source NTFS utility for Mac. It supports all Mac models (Intel and Apple Silicon), providing full read-write access, mounting, and management for NTFS …...

效率翻倍!用 ModelSim 2019.2 给 Vivado 2020.2 工程做仿真的几个高级技巧

效率翻倍!用 ModelSim 2019.2 给 Vivado 2020.2 工程做仿真的几个高级技巧 对于已经熟悉Vivado与ModelSim基础联合仿真流程的开发者来说,真正的挑战往往在于如何突破常规操作的限制,在大型工程中实现高效调试。本文将分享三个经过实战验证的高…...

如何3分钟搞定抖音无水印批量下载:免费工具终极指南

如何3分钟搞定抖音无水印批量下载:免费工具终极指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support…...

零命令行部署飞书AI机器人:桌面应用实现开箱即用

1. 项目概述:一个为普通人设计的飞书AI机器人桌面应用 如果你在飞书里用过官方提供的“AI助手”,可能会觉得它功能不错,但总有些限制——不能自由选择模型,无法深度定制,更别提把它无缝集成到你的工作流里了。于是&am…...

5个简单步骤:用DXVK在Linux上流畅运行Windows游戏

5个简单步骤:用DXVK在Linux上流畅运行Windows游戏 【免费下载链接】dxvk Vulkan-based implementation of D3D8, 9, 10 and 11 for Linux / Wine 项目地址: https://gitcode.com/gh_mirrors/dx/dxvk 你是否曾经想在Linux系统上玩Windows游戏,却被…...

开源浏览器扩展SubLens:集中管理AI订阅账单,告别遗忘扣费

1. 项目概述:一个浏览器扩展,帮你管好AI订阅账单 不知道你有没有这种感觉,每个月信用卡账单出来的时候,总有几个“熟悉的陌生人”——那些你为了尝鲜或者工作需要而订阅的AI服务,比如ChatGPT Plus、Claude Pro、GitHub…...

别再只会用IP核了!手把手教你用Verilog从零实现一个16阶FIR滤波器(附完整代码)

从零构建16阶FIR滤波器:Verilog实战指南与工程思维解析 在FPGA开发领域,FIR(有限脉冲响应)滤波器是数字信号处理的基础模块,但大多数工程师习惯直接调用厂商提供的IP核,这就像只会开自动挡汽车的司机——虽…...

告别软件模拟!用GD32F303硬件I2C驱动AT24C02 EEPROM保姆级教程(附完整代码)

从软件模拟到硬件加速:GD32F303硬件I2C驱动AT24C02全流程解析 当你在嵌入式项目中频繁操作EEPROM时,是否遇到过这样的困扰:软件模拟I2C占用大量CPU资源,时序稳定性受中断影响,传输速率始终无法突破瓶颈?这些…...

Rust与Godot引擎集成:使用gdext构建高性能游戏模块

1. 项目概述:当Rust遇上Godot 如果你是一名游戏开发者,同时又对Rust语言的安全性、性能和现代特性着迷,那么你很可能和我一样,曾经在两个优秀的工具之间感到难以抉择。一边是上手快、生态繁荣的Godot引擎,另一边是能让…...

Linux服务器运维实战:为什么我更推荐用apt安装FileZilla而不是下载tar包?

Linux服务器运维实战:为什么我更推荐用apt安装FileZilla而不是下载tar包? 每次在Linux服务器上部署FTP客户端时,我都会面临一个选择:是直接apt install filezilla,还是去官网下载tar包手动安装?五年前我可能…...

不止于下载:用Active-HDL给你的Lattice FPGA设计做个“体检”(功能仿真实战)

从功能仿真到可靠设计:Active-HDL在Lattice FPGA开发中的深度实践 当LED灯在你的FPGA开发板上如期闪烁时,那种成就感确实令人振奋。但作为经历过多次调试煎熬的工程师,我必须告诉你:能下载运行只是FPGA开发的起点,而非…...

Sora 2视频生成质量跃升47%的关键——Gaussian Splatting空间梯度重参数化技术(独家逆向工程报告)

更多请点击: https://intelliparadigm.com 第一章:Sora 2视频生成质量跃升47%的实证观测与技术归因 近期在多个基准测试中,Sora 2在UCF101-VideoQA、TVD和VidBench v2上的平均PSNR提升达47.2%,SSIM同步上升39.8%,关键…...

为什么你需要LRCGET:5步为离线音乐库实现完美歌词同步

为什么你需要LRCGET:5步为离线音乐库实现完美歌词同步 【免费下载链接】lrcget Utility for mass-downloading LRC synced lyrics for your offline music library. 项目地址: https://gitcode.com/gh_mirrors/lr/lrcget 还在为数千首离线音乐缺少歌词而烦恼…...

C语言编写轻量爬虫工具

当我们要使用C语言编写一个定制化轻量爬虫工具,得需要结合网络请求、HTML解析和数据处理等步骤。由于是轻量级,正常情况下我们将使用C语言标准库以及一些第三方库来简化开发。这样省时省力,生态丰富可以帮助大家少走很多弯路。具体细节可以看…...

如何快速掌握歌词滚动姬:新手到专家的5个终极秘籍

如何快速掌握歌词滚动姬:新手到专家的5个终极秘籍 【免费下载链接】lrc-maker 歌词滚动姬|可能是你所能见到的最好用的歌词制作工具 项目地址: https://gitcode.com/gh_mirrors/lr/lrc-maker 还在为音乐配上精准的LRC歌词而烦恼吗?歌词…...

CANopen协议核心机制与工业自动化应用实践

1. CANopen协议的核心机制解析 CANopen协议作为工业自动化领域的通信标准,其核心在于三个关键机制:对象字典、网络管理(NMT)以及过程数据对象(PDO)/服务数据对象(SDO)。理解这些机制…...

zclean:开发者必备的自动化磁盘清理工具,释放宝贵存储空间

1. 项目概述与核心价值最近在整理自己的开发环境时,又遇到了那个老生常谈的问题:系统用久了,各种临时文件、缓存、残留的依赖包,把磁盘空间一点点蚕食殆尽。特别是对于开发者而言,项目依赖、构建产物、Docker镜像、各种…...

GKD第三方订阅管理解决方案:如何实现订阅标准化管理与90%可用性提升

GKD第三方订阅管理解决方案:如何实现订阅标准化管理与90%可用性提升 【免费下载链接】GKD_THS_List GKD第三方订阅收录名单 项目地址: https://gitcode.com/gh_mirrors/gk/GKD_THS_List 面对Android自动化工具GKD日益增长的第三方订阅管理需求,开…...

别再死记硬背了!我用这5个C语言内存模型的实际案例,搞懂了嵌入式面试的底层逻辑

从崩溃现场到面试答案:5个嵌入式开发中的内存实战案例 凌晨三点的调试灯依然亮着,屏幕上的十六进制数字像某种神秘代码——这是许多嵌入式开发者都熟悉的场景。当系统突然崩溃,内存错误往往是最难追踪的幽灵问题。但有趣的是,这些…...

别再傻傻在线等了!手把手教你用命令行精准定制VS2022离线安装包(附.NET/C++/MFC组件命令)

精准定制VS2022离线安装包:命令行高效配置指南 在开发团队协作或特殊网络环境下,Visual Studio 2022的离线安装成为刚需。但直接下载完整离线包不仅耗时(超过25GB),还会占用大量存储空间——而实际上,90%的…...