首先将需要备份的文件复制到一个新的目录里,然后压缩,以及调用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了,不用每天都手动备份数据了。