备份脚本核心文件编写

新建一个sh文件

touch /opt/backup/backup_core.sh

定义帮助项

usage() {
    echo "Usage: \$0 [-b <备份文件存放地址>] [-s <要备份的文件>] [-p <文件夹前缀(默认:backup_)>] [-m <最大备份数量(默认:5)>] [-h <获取帮助>]"
    echo "Options:"
    echo "  -b <backup_dir>      备份文件存放地址"
    echo "  -s <source_dir>      要备份的文件"
    echo "  -m <max_backups>     最大备份数量(默认:5)"
    echo "  -h                   获取帮助"
    exit 1
}

检查参数是否为空

if [ $# -eq 0 ]; then
    usage
fi

解析命令行参数,且给最大备份数默认值5

max_backups=5
while getopts ":b:s:m:" opt; do
    case ${opt} in
        b )
            backup_dir=$OPTARG
            ;;
        s )
            source_dir=$OPTARG
            ;;
        m )
            max_backups=$OPTARG
            ;;
        \? )
            echo "Invalid option: $OPTARG" 1>&2
            exit 1
            ;;
        : )
            echo "Option -$OPTARG requires an argument." 1>&2
            exit 1
            ;;
    esac
done

检查是否有必要参数缺失,backup_dir和source_dir是必填参数

if [ -z "$backup_dir" ] || [ -z "$source_dir" ]; then
    echo "Error: Missing required arguments."
    usage
fi

创建备份文件夹,如果没有源文件夹则报错,如果没有备份文件夹则创建

if [ ! -d "$source_dir" ]; then
    echo "Error: Source directory $source_dir not found."
    exit 1
fi

if [ ! -d "$backup_dir" ]; then
    mkdir -p $backup_dir
fi

创建备份文件名

backup_file="$(date +'%Y%m%d-%H%M%S').tar.gz"

删除超过最大备份数的备份文件

while [ $(ls -1 ${backup_dir}/* 2>/dev/null | wc -l) -ge $max_backups ]; do
    # 找到最旧的备份文件并删除
    old_backup=$(ls -1t ${backup_dir}/* | tail -1)
    rm "$old_backup"
    echo "Deleted old backup: $old_backup"
done

执行备份

tar -czf $backup_dir/$backup_file -C $source_dir .

echo "Backup completed: $backup_file"

完整代码

#!/bin/bash

# 函数用于输出帮助信息
usage() {
    echo "Usage: \$0 [-b <备份文件存放地址>] [-s <要备份的文件>] [-p <文件夹前缀(默认:backup_)>] [-m <最大备份数量(默认:5)>] [-h <获取帮助>]"
    echo "Options:"
    echo "  -b <backup_dir>      备份文件存放地址"
    echo "  -s <source_dir>      要备份的文件"
    echo "  -m <max_backups>     最大备份数量(默认:5)"
    echo "  -h                   获取帮助"
    exit 1
}


# 检查参数是否为空
if [ $# -eq 0 ]; then
    usage
fi



# 解析命令行参数
max_backups=5
while getopts ":b:s:m:" opt; do
    case ${opt} in
        b )
            backup_dir=$OPTARG
            ;;
        s )
            source_dir=$OPTARG
            ;;
        m )
            max_backups=$OPTARG
            ;;
        \? )
            echo "Invalid option: $OPTARG" 1>&2
            exit 1
            ;;
        : )
            echo "Option -$OPTARG requires an argument." 1>&2
            exit 1
            ;;
    esac
done

# 检查是否有必要参数缺失
if [ -z "$backup_dir" ] || [ -z "$source_dir" ]; then
    echo "Error: Missing required arguments."
    usage
fi

# 创建备份文件夹
if [ ! -d "$source_dir" ]; then
    echo "Error: Source directory $source_dir not found."
    exit 1
fi

if [ ! -d "$backup_dir" ]; then
    mkdir -p $backup_dir
fi

# 创建备份文件名
backup_file="$(date +'%Y%m%d-%H%M%S').tar.gz"

# 删除超过最大备份数的备份文件
while [ $(ls -1 ${backup_dir}/* 2>/dev/null | wc -l) -ge $max_backups ]; do
    # 找到最旧的备份文件并删除
    old_backup=$(ls -1t ${backup_dir}/* | tail -1)
    rm "$old_backup"
    echo "Deleted old backup: $old_backup"
done

# 执行备份
tar -czf $backup_dir/$backup_file -C $source_dir .

echo "Backup completed: $backup_file"

备份多个目录

再新建一个主任务脚本

touch /opt/backup/main.sh

在脚本中逐个创建要备份的目录

# 指定目录
SCRIPT_DIR="/opt/backup"
# 备份mysql
"$SCRIPT_DIR"/backup_core.sh -b "$SCRIPT_DIR"/files/mysql_backup -s /var/mysql
# 备份nginx
"$SCRIPT_DIR"/backup_core.sh -b "$SCRIPT_DIR"/files/nginx_backup -s /var/nginx
# 备份redis
"$SCRIPT_DIR"/backup_core.sh -b "$SCRIPT_DIR"/files/redis_backup -s /var/redis
# 备份sqlserver
"$SCRIPT_DIR"/backup_core.sh -b "$SCRIPT_DIR"/files/sqlserver_backup -s /var/sqlserver

创建定时任务

修改脚本权限

chmod 777 main.sh backup_core.sh

定时任务程序

在Ubuntu中,cron是一个用于在预定时间执行命令或脚本的任务调度程序。它允许用户根据特定的时间间隔、日期或事件来自动运行任务。cron服务在Linux系统中非常常见,用于执行定期维护、备份、日志清理等任务。

cron工作原理如下:

  • 用户可以编辑crontab文件来定义要运行的任务。

  • crontab文件中包含了要执行的命令或脚本以及执行的时间规则。

  • cron服务会定期检查crontab文件,并在规定的时间执行相应的任务。

在Ubuntu中,每个用户都有自己的crontab文件,通常存储在/var/spool/cron/crontabs目录下。可以使用crontab -e命令编辑当前用户的crontab文件,或者使用sudo crontab -e编辑系统范围的crontab文件。

cron任务定义遵循特定的格式,通常如下:

* * * * * command_to_execute
- - - - -
| | | | |
| | | | +----- Day of the week (0 - 7) (Sunday is both 0 and 7)
| | | +------- Month (1 - 12)
| | +--------- Day of the month (1 - 31)
| +----------- Hour (0 - 23)
+------------- Minute (0 - 59)

创建定时任务

crontab -e 打开配置文件,写入如下脚本

00 01 * * * /opt/backup/main.sh

即是每天1点定时运行该脚本。