目 录CONTENT

文章目录

linux备份(2) | 配合nas的webdav,实现linux系统自动备份到webdav文件夹(第二篇)

西溪里
2024-08-31 / 0 评论 / 0 点赞 / 50 阅读 / 0 字

介绍

上一篇我们使用服务器连上了家里的nas的webdav文件夹,现在在服务器上设置脚本,保证每天备份一次

首先创建一个我们的脚本文件夹


# 创建jobs文件夹
mdir /root/data/jobs

# 创建一个autoBack.sh的脚本
vim autoBackup.sh

在脚本内写入如下命令

#!/bin/bash
# Variables
SOURCE_DIR="/root/data/"
DEST_DIR="/mnt/webdav/backup_data/"
TMP_BACKUP="/tmp/data_backup_$(date +'%Y%m%d%H%M%S').tar.gz"
LOG_FILE="/root/data/logs/backup.log"  # 固定的日志文件名

# Ensure log directory exists
if [ ! -d "/root/logs" ]; then
    echo "$(date) - Log directory /root/data/logs does not exist. Creating it..."
    mkdir -p /root/logs
    if [ $? -ne 0 ]; then
        echo "$(date) - ERROR: Failed to create log directory /root/data/logs. Backup aborted."
        exit 1
    fi
fi

# Start logging
echo "$(date) - Starting backup process..." | tee -a $LOG_FILE

# Check if source directory exists
if [ ! -d "$SOURCE_DIR" ]; then
    echo "$(date) - ERROR: Source directory $SOURCE_DIR does not exist. Backup aborted." | tee -a $LOG_FILE
    exit 1
fi

# Check if destination directory exists, if not, create it
if [ ! -d "$DEST_DIR" ]; then
    echo "$(date) - Directory $DEST_DIR does not exist. Creating it..." | tee -a $LOG_FILE
    mkdir -p $DEST_DIR
    if [ $? -ne 0 ]; then
        echo "$(date) - ERROR: Failed to create $DEST_DIR. Backup aborted." | tee -a $LOG_FILE
        exit 1
    fi
    echo "$(date) - Directory $DEST_DIR created successfully." | tee -a $LOG_FILE
fi

# Check and clean up old backups, keeping only the latest 3
if [ "$(ls -1 $DEST_DIR | wc -l)" -gt 3 ]; then
    echo "$(date) - More than 3 backups found. Removing old backups..." | tee -a $LOG_FILE
    ls -t $DEST_DIR | tail -n +3 | xargs -I {} rm -f $DEST_DIR/{}
fi

# Create the backup with tar, display progress with pv
echo "$(date) - Creating backup..." | tee -a $LOG_FILE
if ! tar czfP - $SOURCE_DIR --absolute-names --transform 's|^/root/data/||' | pv -p -t -e -r -s $(du -sb $SOURCE_DIR | awk '{print $1}') > $TMP_BACKUP; then
    echo "$(date) - ERROR: Backup creation failed. Check source directory and pv installation." | tee -a $LOG_FILE
    exit 1
fi

# Move the backup to the WebDAV folder
echo "$(date) - Moving backup to WebDAV folder..." | tee -a $LOG_FILE
if ! mv $TMP_BACKUP $DEST_DIR; then
    echo "$(date) - ERROR: Failed to move backup to $DEST_DIR. Cleaning up temporary backup file..." | tee -a $LOG_FILE
    rm -f $TMP_BACKUP  # 删除临时文件
    echo "$(date) - Temporary backup file removed." | tee -a $LOG_FILE
    exit 1
fi

echo "$(date) - Backup completed successfully." | tee -a $LOG_FILE

脚本使用chatgpt生成的,大概意思是将/root/data/下的文件夹压缩,并将压缩包传到我们挂载的webdav文件夹内/mnt/webdav/backup_data/,最多保留三四份,会删除较老的文件

创建对应的文件夹

cd /root/data
mkdir logs

脚本添加可执行权限

chmod +x  autoBackup.sh

安装pv插件,可以显示进度条

sudo apt-get install pv

我们可以本地测试一下这个命令,进入sh脚本的文件夹,运行脚本

/root/data/jobs/autoBackup.sh

看到success就代表成功了

配置脚本自动定时备份

# 打开文件
crontab -e

# 写入如下命令(每天凌晨4点自动执行脚本)
0 4 * * * /root/data/jobs/autoBackup.sh 

查看是否定时成功

crontab -l

看到如下信息代表设置成功了

0

评论区