七牛云的对象存储有免费的10G存储空间,很适合用来当服务器的关键配置文件备份,所以自己写了一个sh脚本用来定时将本地文件备份后上传到七牛云存储空间。

该脚本依赖于官方命令行工具,下载地址

密钥获取


七牛云qshell自动备份文件脚本如下

#!/bin/bash

# 设置七牛云存储空间的相关信息
# 将获取到的密钥放在这儿
ACCESS_KEY="AZmEJedxxxxxxxxxxxxxxxxxxxxxxxx"
SECRET_KEY="ZBgriX3Yxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
qshell="/usr/bin/qshell"  # 请将路径替换为实际的 qshell 路径

# 这个name随意取
$qshell account "$ACCESS_KEY" "$SECRET_KEY" "name"

# 备份的源目录和目标目录
# 这个放你需要备份的目录列表,我需要备份三个目录,所以写了三个
SRC_DIRS=("/root" "/etc/nginx/conf.d" "/usr/local/ServerStatus")
# 备份文件的名称,和SRC_DIRS相对应
BASE_NAME=("root" "conf" "server")
# 这儿写备份后的文件存放在什么地方
BACKUP_DIR="/backup"

# 检查备份目录是否存在,如果不存在则创建
if [ ! -d "$BACKUP_DIR" ]; then
  mkdir "$BACKUP_DIR"
fi

# 当前日期
CURRENT_DATE=$(date +"%Y%m%d")

# 计算备份文件的索引,每5天切换一个备份
# 每五天备份一次,一共保持两个备份,一个五天前,一个十天前
INDEX=$((($CURRENT_DATE / 5) % 2))

# 循环备份每个目录
# 这儿的{0..2}和上面的SRC_DIRS数量相对应,0..2为三个文件夹
for i in {0..2}
do
    # 构建备份文件名,包括日期和索引
    BACKUP_FILE="${BACKUP_DIR}/${BASE_NAME[$i]}$((INDEX + 1)).tar.gz"

    # 使用 tar 命令备份目录
    tar czf "$BACKUP_FILE" "${SRC_DIRS[$i]}"

    # 输出备份信息
    echo "备份 ${SRC_DIRS[$i]} 到 ${BACKUP_FILE}"
done

# 确保配置文件存在,然后上传
# 将/root/sh/up.conf替换为你的上传配置文件
if [ -f "/root/sh/up.conf" ]; then
  $qshell qupload /root/sh/up.conf
else
  echo "配置文件不存在"
fi
{
    "src_dir" : "/backup",
    "ignore_dir" : true,
    "bucket" : "xiny-like",
    "rescan_local" : true,
    "overwrite" : true,
    "key_prefix": "backup/2/"
}

上传配置文件

{
    "src_dir" : "/backup",
    "ignore_dir" : true,
    "bucket" : "xiny-like",
    "rescan_local" : true,
    "overwrite" : true,
    "key_prefix": "backup/2/"
}

src_dir是本地备份文件的存放位置,bucket替换为七牛云空间创建时的名字,去查看空间名字

key_prefix替换为空间存储中文件夹的名字,我的文件将会存放在xiny-like存储空间中的backup/2/文件夹下,文件夹需要提前先创建。

定时备份

将脚本保存,然后添加到定时任务中

执行

crontab -e

输入

0 0 /5  * /bin/bash /root/sh/backup.sh

/root/sh/backup.sh为脚本位置,记得添加可执行权限

chmod 755 /root/sh/backup.sh

文章作者: 子受
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 薪萤-博客
技术
喜欢就支持一下吧
打赏
微信 微信
支付宝 支付宝