目录
一、要求
1、需求
2、需求分析
二、脚本
1、总述
2、创建备份脚本
(1)脚本命名
(2)脚本内容
3、创建恢复脚本
(1)脚本命名
(2)脚本内容
4、设置cron作业
5、监控脚本
(1)脚本命名
(2)脚本内容
三、 其他事项
一、要求
1、需求
由于长时间运行和使用,linux应用程序的数据也会越来越多,数据非常重要,不能丢失或者被破坏。因此,需要编写一个linux的脚本,对应用程序及其相关目录进行备份和恢复等。
为了确保系统的备份是否正常进行,需要对过程进行监控,同时,也要能够进行恢复测试。
2、需求分析
现需要了解一下linux应用程序的一些目录和文件,如下为原目录、备份目录的可能存放位置,以及日志文件的可能位置:
(1)应用程序原目录 /app1path/vid1_source
(2)应用程序备份目录 /app1path/vid1_ backup
(3)应用程序日志文件 /var/log/backup.log
可以创建一个简单的 Bash脚本来自动化这些任务。可以使用rsync作为备份工具,因为它简单且高效。同时,也可以使用cron来安排定期备份,并记录日志以便于跟踪备份状态。
二、脚本
1、总述
可以创建多个脚本来完成上面的需求:
(1). 创建备份脚本 (vid1_backup_script.sh)。
(2). 创建恢复脚本 (vid1_restore_script.sh)。
(3). 设置cron作业。
(4). 监控脚本 (vid1_monitor_backup.sh)。
2、创建备份脚本
(1)脚本命名
创建一个名为 vid1_backup_script.sh 的备份脚本,该脚本将备份指定的应用程序及其相关目录到备份位置。
(2)脚本内容
脚本内容如下:
3、创建恢复脚本
(1)脚本命名
创建一个名为 vid1_restore_script.sh 的恢复脚本,用于从备份中恢复数据。
(2)脚本内容
脚本内容如下:
#!/bin/bash
# 定义变量
BACKUP_DIR="/app1path/vid1_ backup"
RESTORE_DIR="/app1path/vid1_source"
LOG_FILE="/var/log/restore.log"
# 获取最新的备份目录
LATEST_BACKUP=$(ls -1t "$BACKUP_DIR" | head -n 1)
# 恢复备份
rsync -avz --delete "$BACKUP_DIR/$LATEST_BACKUP/" "$RESTORE_DIR/"
# 记录日志
echo "$(date): Restored from $BACKUP_DIR/$LATEST_BACKUP/" >> "$LOG_FILE"
# 输出确认消息
echo "Restore complete."
exit 0
实际效果如下:
4、设置cron作业
我们需要定期运行备份脚本。可以通过编辑crontab来实现这一目标。
crontab -e
然后添加如下行来每天凌晨2点执行备份:
0 2 /app1path/vid1_ backup_script.sh
5、监控脚本
(1)脚本命名
创建一个名为 vid1_monitor_backup.sh 的脚本来检查备份的状态。
(2)脚本内容
#!/bin/bash
# 定义变量
BACKUP_DIR="/app1path/vid1_ backup"
LOG_FILE="/var/log/backup.log"
RECOVERY_LOG="/var/log/restore.log"
# 检查Cron作业是否存在
check_cron_job() {
CRON_LINE=$(crontab -l | grep "/app1path/vid1_ backup_script.sh")
if [ -n "$CRON_LINE" ]; then
echo "Backup cron job is set up."
else
echo "Backup cron job is NOT set up."
fi
}
# 检查最近一次备份的时间
check_last_backup() {
last_backup=$(grep -oP '\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}' "$LOG_FILE" | tail -n 1)
if [ -n "$last_backup" ]; then
echo "Last backup was on: $last_backup"
else
echo "No backup logs found."
fi
}
# 检查备份文件的总大小
check_backup_size() {
total_size=$(du -sh "$BACKUP_DIR" | cut -f1)
echo "Total size of backups: $total_size"
}
# 检查是否有恢复测试记录
check_recovery_test() {
if [ -f "$RECOVERY_LOG" ]; then
echo "Recovery test log exists."
last_recovery_test=$(grep -oP '\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}' "$RECOVERY_LOG" | tail -n 1)
if [ -n "$last_recovery_test" ]; then
echo "Last recovery test was on: $last_recovery_test"
else
echo "No recovery test logs found."
fi
else
echo "No recovery test log file found."
fi
}
# 监控主程序
main() {
echo "Starting backup monitor script at $(date)"
check_cron_job
check_last_backup
check_backup_size
check_recovery_test
echo "Backup monitor script completed."
}
# 运行监控主程序
main
三、 其他事项
1、权限:确保所有脚本都有适当的执行权限 (chmod +x AA.BBCC.sh)。
2、日志文件:确保日志文件包含足够的信息来跟踪备份和恢复活动。
3、错误处理:在生产环境中,需要添加更多的错误处理逻辑以提高脚本的健壮性。
4、测试恢复:定期手动或自动运行恢复脚本来确保备份的有效性。
5、上述几个脚本提供了一个基本框架,各位可以根据自己的需求进行调整。例如,可以增加压缩备份、加密备份等功能,也可以通过电子邮件发送备份报告等。
文章正下方可以看到我的联系方式:鼠标“点击” 下面的 “威迪斯特-就是video system 微信名片”字样,就会出现我的二维码,欢迎沟通探讨。