介绍
上一篇我们使用服务器连上了家里的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
看到如下信息代表设置成功了
评论区