Iinux脚本bash:对自己的应用程序及其相关目录进行备份和恢复,并可查看备份计划、备份状态、备份大小等

news2024/11/24 13:41:12

目录

一、要求

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 微信名片”字样,就会出现我的二维码,欢迎沟通探讨。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2050407.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mybatis、mybatis-plus自定义插件,实现自定义策略数据脱敏功能

背景 mybatis中四大组件的作用,下面开发的插件拦截器会使用 四大组件Executor、StatementHandler、ParameterHandler、ResultSetHandler 需求 1、根据脱敏规则进行查询数据,显示的时候进行展示脱敏 2、根据脱敏规则进行查询数据,将脱敏后的数据批量更新回数据库,进行脱…

【Python系列】 Python打印99乘法表

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Vue+ElementUI技巧分享:创建一个带有进度显示的文件下载和打包组件

在现代前端开发中,用户体验至关重要,尤其是在处理文件下载时。为用户提供实时的下载进度显示和打包功能,不仅能提升用户体验,还能使应用更具专业性。在本文中,我们将创建一个 Vue 组件,用于显示文件下载进度…

视图变化 - 等比例变换防止视图拉伸

文章目录 使用场景等比变换等高填充等宽填充代码进行比目标宽高计算超出部分处理设置负的 marginclip 裁剪 End参考: 使用场景 在日常开发中,经常会遇到的一个需求是将图片/视频从界面的一个位置,变换到另一个位置。在处理这类问题的时候经常…

基于微信小程序的书籍销售预测系统的设计与实现(论文+源码)_kaic

摘 要 随着信息化社会的进步,我们的生活越来越便利。在网上,我们可以轻松地进行各种交易,其中包括图书交易。可以说,图书交易是网络交易的一个重要方面。本系统以面向对象的方式进行开发,使用MySQL作为主要数据存储…

linux centos stream9图形化操作

初学者对图形化操作比较熟悉,对字符界面、命令行比较陌生。本文讨论一下图形化操作的基本技能。希望初学者掌握后尽快使用字符界面,会执行命令,更会编程。 本案例是基于stream9版本,如版本不同,会有差别,注意操作使用。 一、安装图形化界面 Linux操作系统常用的图形用…

Unity URP无光照下Shadow 制作 <二> 合批处理

闲谈 相信大家在日常工作中发现了一个问题 , urp下虽然可以做到3个Pass 去写我们想要的效果,但是,不能合批(不能合批,那不是我们CPU要干冒烟~!) 好家伙,熊猫老师的偏方来了 &#x…

Leetcode JAVA刷刷站(38)外观数列

一、题目概述 二、思路方向 为了解决这个问题,我们可以编写一个Java函数countAndSay,该函数接受一个整数n作为输入,并返回外观数列的第n个元素。这个函数将基于递归公式来构建数列,其中countAndSay(1) "1",…

vue设置环境变量

1、在根目录地下建立两个文件,.env.development 和 .env.production VUE_APP_BASE_API"" .env.development这个就是开发环境,.env.production这个就是生产环境,也就是这个可以写本地的ip端口 .env.production 这个就是生产环境&…

Verilog刷题笔记51

题目: Now that you have a state machine that will identify three-byte messages in a PS/2 byte stream, add a datapath that will also output the 24-bit (3 byte) message whenever a packet is received (out_bytes[23:16] is the first byte, out_bytes[1…

14、springboot3 vue3开发平台-前端-自定义菜单组件,根据路由动态渲染

文章目录 1. 组件2 . 使用示例 1. 组件 src\components\menuTree\index.vue <template><template v-for"item in menuList"><!-- 分为两种方式渲染&#xff1a;有子菜单和没有子菜单--><!-- 没有子菜单--><el-menu-item :index&qu…

linux cpu问题排查及性能优化

cpu性能 一、cpu啥时候才叫有瓶颈 cpu运行的快还是慢、cpu有没有问题&#xff0c;cpu是不是还需要优化。这些是平常开发和运维中经常遇到的问题。那么我门到底如何去判断机器cpu运行的到底有没有异常呢。 从我排查问题来说&#xff0c;单看系统指标不能完全反应应用运行的状态…

移动魔百盒刷机教程

准备工作 确认型号&#xff1a;首先确认您的魔百盒的具体型号&#xff0c;不同的型号可能需要不同的刷机包。刷机包&#xff1a;下载适合您型号的刷机包。U盘&#xff1a;准备一个容量不超过8GB的U盘&#xff0c;并将其格式化为FAT32格式。刷机工具&#xff1a;根据型号可能需…

深度学习实战:手把手教你构建多任务、多标签模型

多任务多标签模型是现代机器学习中的基础架构&#xff0c;这个任务在概念上很简单 -训练一个模型同时预测多个任务的多个输出。 在本文中,我们将基于流行的 MovieLens 数据集,使用稀疏特征来创建一个多任务多标签模型,并逐步介绍整个过程。所以本文将涵盖数据准备、模型构建、训…

keepalived讲解及练习

目录 1、keepalived介绍 1.1 keepalived简介 2、高可用集群 2.1 集群类型 2.2 系统可用性 2.3 系统故障 2.4 实现高可用 3、VRRP 3.1 VRRP&#xff1a;Virtual Router Redundancy Protocol 3.2 VRRP 相关术语 3.3 VRRP相关技术 4、 keepalived实验 4.1 全局配置 4…

Vue封装axios请求(超详细)

一、简介 Vue封装axios请求是指将axios库集成到Vue项目中&#xff0c;以便更方便地发送HTTP请求。首先&#xff0c;需要安装axios库&#xff0c;然后在Vue项目中创建一个名为request.js的文件&#xff0c;用于封装axios实例。在这个文件中&#xff0c;可以设置默认的配置&#…

fastzdp_sqlmodel框架是如何实现更新和删除相关的功能封装的,20240817,Python的国产新ORM框架

根据模型对象更新 初步封装的方法 def update(engine, model_obj, update_dict):"""修改数据:param engine: 连接数据库的引擎对象:param model_obj: 模型对象:param update_dict: 更新字典:return:"""with Session(engine) as session:if not…

Git工具详细使用教程

Git工具详细使用教程 Git是一个分布式版本控制系统&#xff0c;它可以帮助你管理代码的历史记录。本教程将介绍如何使用Git工具进行基本的版本控制操作。 1. 安装Git 首先&#xff0c;你需要在你的计算机上安装Git。你可以从Git官方网站&#xff08;https://git-scm.com/&am…

MySQL(三)——DCL

文章目录 DCL用户管理查询用户创建用户修改用户密码删除用户 权限控制查询权限授予权限撤销权限 DCL DCL&#xff08;Data Control Language&#xff0c;数据控制语言&#xff09;是SQL的一个子集&#xff0c;专门用于定义数据库、表、视图等的访问权限和安全级别。 它允许数据…

Openstack二层网络的构建和使用

Openstack二层网络的构建和使用 一、实验目的 &#xff08;1&#xff09;了解网络层级、子网、动态地址、网关代理等概念并进行应用。 &#xff08;2&#xff09;了解OpenStack项目以及相关组件。 &#xff08;3&#xff09;了解 Neutron 二层网络的构建和使用。 二、实验原…