定时备份我的Halo全部数据
首先将需要备份的文件复制到一个新的目录里,然后压缩,以及调用oss上传脚本将其上传到oss中。
#!/bin/bash
workdir="tmp/.halo"
datetime="$(date +%Y%m%d%H%M%S)"
bakfile="halo-bak-$datetime.tar.gz"
if [ ! -d $workdir ]
then
mkdir -p $workdir
else
rm -rf "$workdir/*"
fi
cp "/root/.halo/application.yaml" "$workdir/application.yaml"
cp -r "/root/.halo/db/" "$workdir/db"
cp -r "/root/.halo/static/" "$workdir/static"
cp -r "/root/.halo/templates/" "$workdir/templates"
tar -zcf $bakfile $workdir
rm -rf $workdir
python upload.py "$bakfile" "$bakfile"
rm -rf $bakfile
我使用的是七牛云的oss,所以我就使用七牛提供的python的sdk上传文件了。
安装七牛的sdk
pip install qiniu
七牛上传demo
# -*- coding: utf-8 -*-
# flake8: noqa
import os
import sys
from qiniu import Auth, put_file, etag
# 需要填写你的 Access Key 和 Secret Key
access_key = '{AK}'
secret_key = '{SK}'
def upload(path, filename):
# 构建鉴权对象
q = Auth(access_key, secret_key)
# 要上传的空间
bucket_name = '{bucket}'
# 上传后保存的文件名
key = "{prefix}/" + filename
# 生成上传 Token,可以指定过期时间等
token = q.upload_token(bucket_name, key, 3600)
# 要上传文件的本地路径
localfile = path
ret, info = put_file(token, key, localfile)
assert ret['key'] == key
assert ret['hash'] == etag(localfile)
os.system("echo 'upload success! key is " + key + ".\n' > ~/backup.log")
if __name__ == "__main__":
upload(path=sys.argv[1], filename=sys.argv[2])
bak-halo.sh与upload.py在同级目录中
添加到定时任务中
crontab -e
# 加入以下内容
0 0 * * * /root/bak-halo.sh
重启定时任务服务systemctl restart crond.service
这样就OK了,不用每天都手动备份数据了。