
Linux定时备份
备份脚本核心文件编写
新建一个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点定时运行该脚本。
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果