使用Aligo定时备份服务器文件
本帖最后由 xinliu 于 2022-11-12 09:45 编辑## 简介
在现在的互联网时代,数据显得尤为重要,我们的服务器中也有一些重要数据,如果服务器被攻击或者过期忘记取回数据,那造成的后果难以想象,所以要做好定时备份的习惯,但是人又懒怎么办呢,今天给出一个Aligo定时备份文件的解决方案。
## 源码
使用python3.8压缩备份文件,使用第三方库`aligo`来上传到阿里云盘
```python
from aligo import Aligo
import time
import datetime
import gzip
import os
import zipfile
# 备份目录路径数组
backup_dir_list = [
'/www/lskypro/storage/app/uploads',
'/www/shinie.top',
'/www/bot',
'/www/bimg.cc'
]
# 压缩包路径
compress_dir = '/www/aligo/backup'
# 压缩包文件名数组,可添加文件夹
compress_name_list = [
'lskypro.zip',
'shinie.top.zip',
'bot.zip',
'bimg.cc.zip'
]
# 阿里云盘上传路径
upload_dir = '服务器数据备份'
# 压缩包保存多少天
day=7
# 接收登录二维码邮件
email='xxxx@qq.com'
# 防伪字符串
security_str='backup-server-file'
t=time.strftime("%Y-%m-%d",time.localtime())
if __name__ == '__main__':
ali = Aligo(email=(email, security_str))
# 遍历备份目录
for i in range(0,len(backup_dir_list)):
remote_folder = ali.get_folder_by_path(upload_dir)
# 遍历压缩目录
for zip_file in os.listdir(compress_dir):
t_be=zip_file
start = datetime.datetime.strptime(t_be, "%Y-%m-%d")
end = datetime.datetime.strptime(t, "%Y-%m-%d")
days = (end-start).days #计算天数差
old_zip_file=compress_dir+'/'+t_be+"/"+compress_name_list
# 删除过期文件
if days>day:
print("旧文件:"+old_zip_file+"已过期")
print("即将删除本地压缩文件:"+old_zip_file)
if os.path.exists(old_zip_file):
os.remove(old_zip_file)
# 创建压缩包完整目录 /www/backup/2022-11-11/
compress_pull_dir=compress_dir+'/'+t+"/"
if os.path.exists(compress_pull_dir)==False:
os.makedirs(compress_pull_dir)
# 压缩
zip_file=compress_pull_dir+compress_name_list
zip = zipfile.ZipFile(zip_file, 'w', zipfile.ZIP_DEFLATED)
for root,dirs,files in os.walk(backup_dir_list): #遍历统计
for each in files:
if os.path.exists(root+"/"+each):
zip.write(root+"/"+each)
zip.close()
# 同步文件夹(以本地文件为主)
ali.sync_folder(local_folder=compress_dir, remote_folder=remote_folder.file_id,flag=True,follow_delete=True)
```
参数解释:
| 参数 | 解释 | 参考值 |
| :----------------: | :----------------------------------------------------------: | :----------------------------------------------------: |
|backup_dir_list | 备份目录路径数组,可选择备份服务器的文件路径(必要) | ['/www/lskypro/storage/app/uploads','/www/shinie.top'] |
| compress_dir | 压缩包存放的目录,可与备份路径不一样(必要) | '/www/aligo/backup' |
| compress_name_list | 压缩包文件名数组,需和backup_dir_list长度一致,且一一对应(必要) | [ 'lskypro.zip', 'shinie.top.zip'] |
| upload_dir | 阿里云盘上传路径(必要) | 'AList/服务器数据备份' |
| day | 压缩包保存天数(必要) | 7 |
| email | 接收登录二维码邮件(必要) | '1982989137@qq.com' |
| security_str | 防伪字符串 | 'backup-server-file' |
先运行一遍(记得改邮箱)登录阿里云盘,获取token
编辑`/etc/crontab`:
```shell
2 0 * * * root /www/python3.8.6/bin/python3.8 /www/aligo/upload.py
```
不是root用户运行程序的话需要先修改.py文件权限:
```shell
chmod 777 /www/aligo/upload.py
```
python需要自行安装:(https://blog.panghai.top/posts/d5f4/)
## 效果
![阿里云盘保存服务器数据](https://cdn.panghai.top/b/cbb5481/636dc94bc0db2.png) 很好的工具,也可以用于个人文件备份啊 alan3258 发表于 2022-11-12 11:10
搞一个可执行程序最好了,要不服务器还的部署py环境,挺实用的
服务器如果是windows可以尝试用pyinstaller打包成.exe执行
linux的话那只能安装python环境了 搞一个可执行程序最好了,要不服务器还的部署py环境,挺实用的 那些OSS备份太费钱了 这个确实不错 我一直备份在Googledrive上,有现成的插件,有时间试一试大佬的这个。 hanbing360 发表于 2022-11-12 14:00
我一直备份在Googledrive上,有现成的插件,有时间试一试大佬的这个。
没有魔法{:1_908:} 有点麻烦,希望楼主可以优化使用方法 Guaishou123 发表于 2022-12-2 15:27
有点麻烦,希望楼主可以优化使用方法
简单的无法应对复杂场景
页:
[1]
2