酒店网站建设策划书怎么写,wordpress 简单企业主题,企业seo网站推广,百度指数怎么分析目录
1. 服务器备份知识点
1.1 备份策略
1.2 备份步骤和宝塔面板简介
1.3 CentOS7重要目录
2. 备份工具
2.1 tar -g
备份演示
2. rsync
备份演示
3. rdiff-backup
备份演示
4. 差异和优缺点
3. rdiff-backup安装和使用
3.1 备份命令rdiff-backup
3.2 恢复命令--…目录
1. 服务器备份知识点
1.1 备份策略
1.2 备份步骤和宝塔面板简介
1.3 CentOS7重要目录
2. 备份工具
2.1 tar -g
备份演示
2. rsync
备份演示
3. rdiff-backup
备份演示
4. 差异和优缺点
3. rdiff-backup安装和使用
3.1 备份命令rdiff-backup
3.2 恢复命令--restore-as-of
3.3 删除命令--remove-older-than
3.4 备份目录选择
3.5 手动备份home目录演示
第一次备份
第二次备份
第三次备份
恢复到第二次备份数据
3.6 自动化备份脚本
第一次备份
第二次备份
测试多目录备份脚本
测试Linux定时任务
1. 宝塔面板
backEnd2
2. Linux定时任务命令
2.1 系统配置文件
2.2 用户的配置文件
3 crontab -e
3.1 定时测试
3.2 每分钟测试
3.3 定时任务注意事项
3.4 实际测试
3.5 测试睡眠时产生多个文件
3.6 最终备份脚本
监控Linux目录差异
最终测试
最终监控脚本
本篇完。 1. 服务器备份知识点
1.1 备份策略 3份备份 除了原有的数据备份副本之外应该始终保证有两个额外的备份副本或版本。假设一份备份被损坏的的机率为1/100那么三份备份遭到损坏的机率便仅为1/1000000意味着在原本的备份基础上多添加两份保障。2种介质至少在两种不同的存储介质上存储数据副本包括内部驱动器以及外部媒介如磁盘、磁带、闪存、网络存储或云存储等。将备份存放在不同的介质中为的就是降低单一介质遭遇损坏的风险。1份异地将至少一份备份数据存储在异地作为异地副本备份数据之间的隔离十分重要将外部存储设备与生产存储设备存放在同一空间的行为并不明智一旦遭遇洪水火灾等自然灾害时数据就可能会有”团灭”的危机。 Linux备份通常可以分为以下几个层次这些层次主要基于备份的广度和深度来划分
完全备份Full Backup 完全备份是指将所有需要备份的数据全部进行备份。这种备份方式会备份整块硬盘、整个分区或某个具体的目录中的所有数据。完全备份的优点是恢复时简单快捷因为所有需要的数据都已经包含在备份文件中。缺点是备份所需的时间和存储空间较大特别是当数据量很大时。 增量备份Incremental Backup 增量备份是在完全备份的基础上只备份自上一次备份无论是完全备份还是增量备份以来发生了更改的数据。增量备份的优点是备份所需的时间和存储空间较小因为它只备份新增或修改的数据。缺点是恢复时可能需要多个备份文件包括完全备份和多个增量备份恢复过程相对复杂。 差异备份Differential Backup 差异备份与增量备份类似但它是基于上一次完全备份来备份之后所有发生更改的数据。即每次差异备份都会备份自上一次完全备份以来所有新增或修改的数据。差异备份的优点是恢复时相对增量备份简单因为它只需要一个完全备份和一个最新的差异备份文件。缺点是随着时间的推移差异备份文件可能会变得很大因为它包含了自上次完全备份以来的所有更改。 对于数据变化不大的系统可以选择完全备份和定期的差异备份而对于数据变化频繁的系统则可以选择完全备份和频繁的增量备份。 普通的备份策略比如一周一次全量备份一天一次增量备份全量备份可以用宝塔定时备份保存三份文件自己备份也可以。 1.2 备份步骤和宝塔面板简介
一般备份步骤
1. 数据识别与分类
识别重要数据首先需要明确哪些数据是业务关键或法律要求必须保留的。数据分类根据数据的敏感性、重要性和恢复时间目标RTO进行分类以便制定合适的备份策略。
2. 备份策略制定
全备份与增量/差异备份定期执行全备份并在全备份之间执行增量或差异备份以减少存储需求和备份时间。备份频率根据数据变化频率和业务需求确定备份的频率。备份保留周期设定备份数据的保留时间以满足合规性和历史记录需求。
3. 备份介质与存储
本地备份使用硬盘、磁带或NAS/SAN等本地存储设备进行备份。云备份利用云服务提供商的存储服务进行远程备份提供更高的数据可用性和灾难恢复能力。混合备份结合本地和云备份的优势实现灵活的数据保护和恢复策略。
4. 系统配置备份
操作系统配置备份操作系统的配置文件、注册表Windows或系统文件Linux。应用程序配置备份所有关键应用程序的配置文件、数据库连接字符串等。网络配置备份路由器、交换机、防火墙等网络设备的配置。虚拟化环境配置备份虚拟机模板、快照和虚拟机管理器的配置文件。
5. 备份验证与测试
备份验证定期验证备份数据的完整性和可恢复性确保备份过程没有错误。灾难恢复演练定期进行灾难恢复演练测试备份数据的恢复流程和时间确保在真实灾难发生时能够迅速恢复业务。
6. 安全与合规性
加密备份数据对备份数据进行加密防止数据在传输和存储过程中被未经授权访问。访问控制对备份存储设备和备份过程实施严格的访问控制确保只有授权人员能够访问备份数据。合规性确保备份策略符合行业法规和标准如GDPR、HIPAA等。
7. 自动化与监控
自动化备份使用自动化工具或脚本来执行备份任务减少人为错误并提高备份效率。监控与报警实时监控备份过程和备份存储设备的状态设置报警机制以便在出现问题时及时响应。
宝塔面板有上部分的大部分功能快照的话环境也会备份。 1.3 CentOS7重要目录
在CentOS 7的备份过程中根目录/下的目录哪些需要被备份主要取决于系统的具体使用情况和数据的重要性。以下是一些通常需要备份的关键目录
/etc 这个目录包含了系统的配置文件包括网络配置如/etc/sysconfig/network-scripts/、SSH配置/etc/ssh/、防火墙和SELinux配置/etc/firewalld/、/etc/selinux/、主机名和主机文件/etc/hostname、/etc/hosts等。这些配置文件对于系统的正常运行至关重要因此在备份时必须包含。 /home 用户的主目录通常位于此目录下每个用户都有一个以其用户名命名的目录其中包含用户的个人文件、配置、下载等。这些目录对于保留用户数据至关重要因此在备份时必须包括。 /root 如果root用户经常用于执行重要任务或存储关键文件那么/root目录也应该被备份。这个目录包含了root用户的主目录和可能存储在其中的配置文件或重要数据。 /var/log 日志文件对于系统的故障排查和历史记录非常有用。如果需要保存系统的历史记录或用于后续的审计那么/var/log目录也应该被备份。 数据库目录 如果系统上运行有数据库服务如MySQL、PostgreSQL等那么数据库的数据目录和配置文件也需要被备份。具体的数据目录位置取决于数据库的配置但通常可以在数据库的配置文件中找到如MySQL的/etc/my.cnf。 /usr/local或特定应用安装目录 如果在/usr/local或系统的其他非标准位置安装了第三方软件或应用那么这些目录也应该被备份。这包括应用程序的可执行文件、库文件、配置文件和数据文件。 其他重要目录 根据系统的具体使用情况可能还有其他重要目录需要被备份如/var/spool/mail系统邮件目录、/var/spool/cron计划任务目录等。 需要注意的是在备份过程中一些目录可能会被排除在外因为它们包含了临时文件或系统运行时所需的动态生成的文件。例如/proc、/sys、/tmp等目录通常不需要备份因为它们在系统重启后会被重新生成或清空。 此外对于整个系统的备份可以使用tar命令或dd命令等工具来实现。tar命令可以用于打包和压缩特定的目录和文件而dd命令则可以用于备份整个硬盘或分区。在选择备份方法时应根据系统的具体需求和数据的重要性来决定。 最后备份完成后应将备份文件存储在安全可靠的位置如外部硬盘、云存储或远程服务器以确保在数据丢失或系统故障时能够迅速恢复。 关机原因那个应该就是尝试重启到16700次但是没有重启成功同时slurmd还在运行当时说下载东西刚才查了一下有这种重启很多次就会影响性能然后性能不好的同时下载很多东西可能服务器就断了推测是这样。 fVjWeDNS.service网上搜不到冠凌那边看他们的回复应该也不知道这个服务是干嘛的我觉得可以先把尝试启动/bin/rRUBHDfR的那一行注释掉因为也找不到这个文件夹一直尝试执行也是个问题。 在Linux系统中目录结构遵循一套标准规范不同的目录用于存放不同类型的文件和数据。以下是您提到的目录的详细解释以及是否需要备份的建议
目录解释 在Linux系统中目录结构遵循一套标准规范不同的目录用于存放不同类型的文件和数据。以下是您提到的目录的详细解释以及是否需要备份的建议 bin: 存放基本的用户命令如ls, cp, mv等通常是系统启动时需要的基本命令。 备份建议: 建议备份因为它包含基本的系统命令。 dev: 包含设备文件这些文件表示系统中的设备如硬盘、终端等。 备份建议: 通常不需要备份因为这些文件在系统重启时会自动生成。 home: 存放用户的个人文件和设置每个用户在此目录下有一个子目录。 备份建议: 强烈建议备份因为它包含用户的个人数据和配置。 lib: 包含系统和应用程序所需的共享库文件动态链接库。 备份建议: 建议备份因为某些应用程序和系统命令依赖于这些库。 lib64: 64位系统的共享库目录类似于lib但专门用于64位库。 备份建议: 建议备份尤其在64位系统上。 mnt: 通常为空作为临时挂载文件系统的挂载点。 备份建议: 通常不需要备份。 proc: 虚拟文件系统提供关于系统和进程的信息。 备份建议: 不需要备份因为这些文件是动态生成的。 rpm: 用于存放RPM包的目录可能包含软件包的管理信息。 备份建议: 如果有特殊的软件包或信息可以考虑备份。 sbin: 存放系统管理员使用的命令如shutdown, ifconfig等。 备份建议: 建议备份因为这些命令通常需要在系统维护时使用。 srv: 存放服务相关的数据如HTTP服务器、FTP服务器的数据等。 备份建议: 根据服务的需要建议备份。 tmp: 存放临时文件系统和用户都可以使用通常在重启后清空。 备份建议: 不需要备份因为其内容是临时的。 var: 存放可变数据文件如日志文件、邮件队列、数据库文件等。 备份建议: 强烈建议备份因为它包含系统运行中的重要数据。 boot: 包含启动加载器和内核文件系统启动所需的文件。 备份建议: 建议备份特别是在系统重装或恢复时。 etc: 存放系统配置文件和目录如网络设置、用户账户等。 备份建议: 强烈建议备份因为这些配置对于系统的正常运行至关重要。 media: 通常用于挂载可移动媒体如USB驱动器、CD-ROM等。 备份建议: 根据需要备份可移动媒体中的数据。 opt: 存放附加的第三方应用程序。 备份建议: 根据具体安装的应用程序建议备份。 root: 超级用户的家目录。 备份建议: 建议备份因为可能包含重要的配置和数据。 run: 包含当前运行时信息如PID文件。 备份建议: 不需要备份因为其内容是动态的。 slurm: 如果系统使用SLURM作为作业调度程序通常包含相关的文件和信息。 备份建议: 根据使用情况可能需要备份。 sys: 提供系统信息通常是虚拟文件系统。 备份建议: 不需要备份因为其内容是动态的。 usr: 包含用户程序和共享数据通常分为bin, lib, sbin, share等子目录。 备份建议: 建议备份因为包含很多用户级别的应用程序。 www: 通常是Web服务器的根目录。 备份建议: 强烈建议备份尤其是Web内容。
总结
强烈建议备份的目录: home, var, etc, usr, boot, www建议备份的目录: bin, lib, lib64, sbin, srv, opt, root, rpm通常不需要备份的目录: dev, mnt, proc, tmp, run, sys
要加的目录 bin: 存放基本的用户命令如ls, cp, mv等通常是系统启动时需要的基本命令。 备份建议: 建议备份因为它包含基本的系统命令。 lib: 包含系统和应用程序所需的共享库文件动态链接库。 备份建议: 建议备份因为某些应用程序和系统命令依赖于这些库。 lib64: 64位系统的共享库目录类似于lib但专门用于64位库。 备份建议: 建议备份尤其在64位系统上。 sbin: 存放系统管理员使用的命令如shutdown, ifconfig等。 备份建议: 建议备份因为这些命令通常需要在系统维护时使用。 srv: 存放服务相关的数据如HTTP服务器、FTP服务器的数据等。 备份建议: 根据服务的需要建议备份。 var: 存放可变数据文件如日志文件、邮件队列、数据库文件等。 备份建议: 强烈建议备份因为它包含系统运行中的重要数据。 boot: 包含启动加载器和内核文件系统启动所需的文件。 备份建议: 建议备份特别是在系统重装或恢复时。 etc: 存放系统配置文件和目录如网络设置、用户账户等。 备份建议: 强烈建议备份因为这些配置对于系统的正常运行至关重要。 root: 超级用户的家目录。 备份建议: 建议备份因为可能包含重要的配置和数据。 slurm: 如果系统使用SLURM作为作业调度程序通常包含相关的文件和信息。 备份建议: 根据使用情况可能需要备份。 usr: 包含用户程序和共享数据通常分为bin, lib, sbin, share等子目录。 备份建议: 建议备份因为包含很多用户级别的应用程序。 www: 通常是Web服务器的根目录。 备份建议: 强烈建议备份尤其是Web内容。 run: 包含当前运行时信息如PID文件。 备份建议: 不需要备份因为其内容是动态的。 2. 备份工具
2.1 tar -g 备份演示
全备份 在oxTest目录增加文件后增量备份 恢复数据到 /home/rtx/oxTest2 恢复增量备份 查看增量备份 2. rsync
加 --diff 选项可以实现同步删除文件类似差异备份否则只能增量备份 rsync 是一个在 Linux 和 Unix 系统中广泛使用的文件传输和同步工具。它可以在本地和远程之间高效地复制和同步文件和目录同时尽量减少数据传输量因为它只传输差异部分即已更改的部分。rsync 非常适合用于备份和镜像以及作为高效的文件传输工具。
基本语法
rsync [选项] 源路径 目标路径
常用选项
-a 或 --archive归档模式表示以递归方式传输文件并保持所有文件属性等同于 -rlptgoD。-v 或 --verbose详细模式输出更多信息。-z 或 --compress在传输时压缩数据。-r 或 --recursive递归复制目录树。-l 或 --links复制符号链接作为符号链接。-p 或 --perms保持文件权限。-t 或 --times保持文件时间戳。-g 或 --group保持文件组信息。-o 或 --owner保持文件所有者信息超级用户才能使用。-D 或 --devices保持设备文件信息超级用户才能使用。--delete删除目标目录中源目录中没有的文件使两边内容一致。--progress显示传输进度。-e指定远程 shell用于通过 SSH 传输文件如 -e ssh -p 2222。--contimeoutN设置连接超时时间单位为秒。
示例 本地目录同步 rsync -avz /source/directory/ /destination/directory/ 这个命令会将 /source/directory/ 目录下的所有内容包括子目录和文件同步到 /destination/directory/同时保持文件属性、压缩数据并显示详细过程。 通过 SSH 远程同步 rsync -avz -e ssh -p 2222 /local/directory/ userremotehost:/remote/directory/ 这个命令会将本地的 /local/directory/ 目录通过 SSH假设 SSH 端口为 2222同步到远程主机 remotehost 的 /remote/directory/ 目录下。 删除目标目录中不存在的文件 rsync -avz --delete /source/directory/ /destination/directory/ 这个命令除了同步文件外还会删除 /destination/directory/ 中那些在 /source/directory/ 中不存在的文件使两边内容完全一致。 备份演示
第一次全备份 添加一个文件后增量备份 无法把增量备份中增量的数据单独做成一个文件 rsync是传输和同步文件目的文件没有压缩。 3. rdiff-backup 在Linux的CentOS 7中差异备份工具的一个常用选项是rdiff-backup。rdiff-backup工具特别适用于累积差异备份通过它用户可以仅备份自上次完整备份或差异备份以来发生变化的数据从而节省存储空间并提高效率。在公司用rdiff-backup备份的话像home目录和其它重要目录可以每天备份一次然后其他数据库的数据可以两天备份一次环境之类的不太懂在哪个文件然后会修改的其他文件就可以一周备份一次都保留两份
rdiff-backup 用于累积差异备份加上自己写的shell script每日备份效果更佳 先用yum search rdiff-backup看看是否yum源含有rdiff-backup这个package若没有的话请yum install epel-release
接下来yum install rdiff-backup
用法用man来查一下吧直接贴一份脚本 方括号相当于两个小括号用来判断真假
脚本文件下载地址: 百盘 密码: 9af9
然后设定每日定时进行差异备份 我设定为每日晚上10点自动进行差异备份
下面查看一下服务器备份的情况 可以通过时间来还原该目录下的某个文件或者该整个目录还原方法如下
以下皆为演示需要才新建backuptest文件夹若真正需要还原的时候可以直接指定到目标文件夹进行覆盖 比如 rdiff-backup -r now /backup/etc.dir /etc 实验的时候最好不要这样用
1.按时间还原整个目录 还原只会按指定时间之前最近的一次备份进行还原比如上面我写now那么它会找到在当前时间之前最近的一次备份进行还原也就是还原到上2图中的Current mirror: Tue Dec 12 22:00:01 2017这个时间 可以看到还原后该文件夹的时间确实是那个时间点之前的时间说明该目录最后一次修改是在20:49:13这个时间
若要单独还原某文件到某个时间点可以进行如下操作
首先通过man rdiff-backup来查看下还原部分介绍RESTORING开头的部分 该部分内容介绍了凡是以.diff.snapshot.dir.gz被gzip压缩后皆可进行还原而.missing表示文件在该时间点后已经不存在 rdiff-backup-data文件夹下放的是差异文件这些都是整个目录的差异备份文件可以直接使用该文件还原到某个时间点 而rdiff-backup-data目录内的increments记录的是etc这个文件夹下文件的差异备份文件可以使用该文件进行还原etc目录下的某个文件到某个时间点
下面举例还原/etc/resolve.conf这个文件首先查看下差异备份文件 还原时间为2017-12-11 22:45:06查看下我们本地文件 本地文件时间为2017-12-12 20:49:13因此现在将该文件还原到上述差异备份文件所在的时间点 以上便成功将文件还原到了2017-12-11 22:45:06那个时候的状态你可能会奇怪为什么文件的日期却是2017-12-10 11:15:28这是因为我们的rdiff-backup程序只会记录备份时间而不会修改文件的任何属性这说明在2017-12-11 22:45:06这个时间的时候文件的modification time(-mtime)便是2017-12-10 11:15:28 备份演示
差异备份增和减
4. 差异和优缺点
在CentOS 7的备份策略中tar、rsync和rdiff-backup是三种常用的工具它们各自适用于不同的场景并具有不同的优缺点。
1. tar -g
适用情况
全系统或目录备份tar命令非常适合用于整个系统或指定目录的备份。它可以保留文件权限、所有者和其他属性非常适合在灾难恢复时重建系统或目录结构。
优点
灵活性高可以指定任意目录进行备份也可以包含或排除特定文件。保留文件属性备份时保留文件的权限、时间戳等属性。支持多种压缩格式如gzip、bzip2等可以有效减少备份文件的大小。
缺点
恢复时需要额外操作恢复时可能需要手动重新创建被排除的目录如/proc、/sys等。备份时间较长对于大型目录或系统备份过程可能需要较长时间。
2. rsync
适用情况
远程和本地同步rsync非常适合在本地和远程系统之间同步文件和目录。它支持增量备份只传输更改过的部分从而节省时间和带宽。
优点
增量备份只备份自上次备份以来更改过的数据减少备份时间和存储空间。保持文件属性保留原始文件的权限、时间戳、软硬链接等。压缩传输在传输过程中可以压缩数据减少带宽使用。安全性可以通过SSH等安全协议传输数据。
缺点
恢复功能有限rsync本身不直接提供恢复功能通常需要与其他工具结合使用。依赖外部连接在远程备份时依赖稳定的网络连接。
3. rdiff-backup
适用情况
高效增量备份rdiff-backup结合了增量备份和镜像备份的优点非常适合需要频繁备份且数据量大的场景。
优点
高效性通过增量备份和数据压缩技术显著提高备份效率减少存储空间的占用。灵活性支持本地和远程备份用户可以根据需要选择合适的备份方式。安全性使用SSH进行数据传输确保备份数据的安全性。恢复功能强大支持按时间点恢复文件或整个目录用户可以恢复到任意一个历史备份点。
缺点
学习曲线对于初学者来说可能需要一定时间来熟悉其命令和选项。依赖外部工具在Windows等非Linux系统上使用时可能需要借助其他工具如Cygwin来运行。
3. rdiff-backup安装和使用 在Linux的CentOS 7中差异备份工具的一个常用选项是rdiff-backup。rdiff-backup工具特别适用于累积差异备份通过它用户可以仅备份自上次完整备份或差异备份以来发生变化的数据从而节省存储空间并提高效率。rdiff-backup不能备份非目录文件可以新建一个目录放进去。 在CentOS或RHEL系统上可以使用yum包管理器来安装rdiff-backup sudo yum install epel-release
sudo yum install rdiff-backup3.1 备份命令rdiff-backup
使用 rdiff-backup 命令将 example 目录备份到 example-backup 目录 rdiff-backup example example-backup 第二次备份操作rdiff-backup 会自动进行增量备份
使用 --list-increments 选项列出所有备份信息 rdiff-backup --list-increments example-backup或者使用 --list-increment-sizes 以表格形式列出备份大小 rdiff-backup --list-increment-sizes example-backup3.2 恢复命令--restore-as-of 执行备份命令到新目录时新目录下会生成一个rdiff-back-data的目录里面有很多文件命名为同一时间的就可以用rdiff-backup --restore-as-of恢复到当时备份的时间。 用 --restore-as-of 选项指定要恢复的时间点。例如恢复到某个具体时间
rdiff-backup --restore-as-of Sun Sep 8 11:42:30 2024 example-backup example-restore或者恢复到最新备份
rdiff-backup --restore-as-of now example-backup example-restore如果目标目录已存在可以使用 --force 选项强制覆盖
rdiff-backup --restore-as-of now --force example-backup example3.3 删除命令--remove-older-than
为了节省存储空间可以删除旧的备份文件。以下是删除旧备份的基本步骤
使用 --remove-older-than 选项删除指定时间之前的备份。例如删除一天前的备份
rdiff-backup --remove-older-than 1D example-backup如果需要删除多个备份可以使用 --force 选项
rdiff-backup --remove-older-than 1D --force example-backupman查看--remove-older-than详细信息 smhDWMY分别代表秒分时天周月年
回来演示删除一天前的备份 目前来看rdiff-backup-data里有差异备份的才会删除否则不会删除 3.4 备份目录选择
公司服务器磁盘
现在可以暂时备份home目录和root目录和etc目录和www目录分别备份到两个back目录里。 3.5 手动备份home目录演示
rdiff-backup --include /dir1/important_files dir1 dir2
第一次备份
把/home目录的所有内容备份到一个新建的目录/homeBack
除了原有的数据还多了一份rdiff-backup-data目录新备份homeBack里的可执行文件也可执行
第二次备份
进入原home目录里增加一个文件和删除一个文件后进行第二次备份
目标目录的rdiff-backup-data里自动增加了多份新文件
第三次备份
类似第二份备份的操作在原home目录修改一些文件后再进行第三次备份
目标目录的rdiff-backup-data里也自动新增了一系列第三次备份的相关文件
恢复到第二次备份数据
rdiff-backup-data生成了一份恢复日志里面的其它内容没有变化
进入原home目录后发现确实恢复到了第二份备份的数据无TestAdd2.txtTest目录没修改成TestDiff。
3.6 自动化备份脚本
rdiff-backup备份脚本
#!/bin/bash
sour_dirs/home/back1 # 设置要备份的目录列表
dest_dirs/home/back2 # 设置备份目标目录远程或本地
log_file/home/back2/back.log # 设置备份日志文件的路径
date$(date %y%m%d %H:%M:%S) #备份的日期[ ! -d $dest_dirs ] mkdir -p $dest_dirs #如果目标目录不存在就创建
[ ! -d $log_file ] touch $log_file #如果日志文件不存在就创建
echo ${date} $log_file
for s_dir in $sour_dirs
do d_dir$dest_dirs${s_dir}.dir[ ! -f $d_dir ] mkdir -p $d_dir #如果源文件名.dir不存在就创建rdiff-backup $s_dir $d_dir #将源文件分别备份为 源文件名.dirif [ $? 0 ]; then #如果上一个命令没出问题就继续succ_msg${succ_msg}source: $s_dir, dest: $d_dir\n #获取日志信息if [ $? 0 ]; thenrdiff-backup --force --remove-older-than 1M $d_dir #移除一个月以前的备份文件[ $? 0 ] rmv_msg${rmv_msg}$d_dir\n #获取日志信息fi;elsefail_msg${fail_msg}source: $s_dir, dest: $d_dir\n #获取日志信息fi;
done
echo -e [BACKUP SUCCESS]\n$succ_msg $log_file #输入日志信息到日志文件
echo -e [BACKUP FAILED ]\n$fail_msg $log_file
echo -ne [REMOVE FILES ]\n${rmv_msg} $log_file
echo -e (remove older than 1 month files is all above)\n $log_file 第一次备份
在下面环境运行以上脚本 日志文件和data目录都正常 第二次备份
进入原/home/back1目录里增加一个文件和删除一个文件后进行第二次备份 data目录也正常 测试多目录备份脚本 运行以下脚本 结果和预料一样 测试Linux定时任务
#!/bin/bash
sour_dirs/home/back1 /home/back0 # 设置要备份的目录列表
dest_dirs/home/backEnd2 # 设置备份目标目录远程或本地
log_file/home/backEnd2/back.log # 设置备份日志文件的路径
date$(date %Y%m%d %H:%M:%S) #备份的日期[ ! -d $dest_dirs ] mkdir -p $dest_dirs #如果目标目录不存在就创建
[ ! -d $log_file ] touch $log_file #如果日志文件不存在就创建
echo ${date} $log_file
for s_dir in $sour_dirs
do d_dir$dest_dirs${s_dir}.dir[ ! -f $d_dir ] mkdir -p $d_dir #如果源文件名.dir不存在就创建rdiff-backup $s_dir $d_dir #将源文件分别备份为 源文件名.dirif [ $? 0 ]; then #如果上一个命令没出问题就继续succ_msg${succ_msg}source: $s_dir, dest: $d_dir\n #获取日志信息if [ $? 0 ]; thenrdiff-backup --force --remove-older-than 15m $d_dir #移除15分钟以前的备份文件[ $? 0 ] rmv_msg${rmv_msg}$d_dir\n #获取日志信息fi;elsefail_msg${fail_msg}source: $s_dir, dest: $d_dir\n #获取日志信息fi;
done
echo -e [BACKUP SUCCESS]\n$succ_msg $log_file #输入日志信息到日志文件
echo -e [BACKUP FAILED ]\n$fail_msg $log_file
echo -ne [REMOVE FILES ]\n${rmv_msg} $log_file
echo -e (remove older than 1 month files is all above)\n $log_file
1. 宝塔面板 成功定时启动了shell脚本 backEnd2
一分钟执行一次脚本删除5分钟前的备份无差异备份的话不会删除 #!/bin/bash
sour_dirs/home/back1 /home/back0 # 设置要备份的目录列表
dest_dirs/home/backEnd2 # 设置备份目标目录远程或本地
log_file/home/backEnd2/back.log # 设置备份日志文件的路径
date$(date %y%m%d %H:%M:%S) #备份的日期[ ! -d $dest_dirs ] mkdir -p $dest_dirs #如果目标目录不存在就创建
[ ! -d $log_file ] touch $log_file #如果日志文件不存在就创建
echo ${date} $log_file
for s_dir in $sour_dirs
do d_dir$dest_dirs${s_dir}.dir[ ! -f $d_dir ] mkdir -p $d_dir #如果源文件名.dir不存在就创建rdiff-backup $s_dir $d_dir #将源文件分别备份为 源文件名.dirif [ $? 0 ]; then #如果上一个命令没出问题就继续succ_msg${succ_msg}source: $s_dir, dest: $d_dir\n #获取日志信息if [ $? 0 ]; thenrdiff-backup --force --remove-older-than 5m $d_dir #移除5分钟以前的备份文件[ $? 0 ] rmv_msg${rmv_msg}$d_dir\n #获取日志信息fi;elsefail_msg${fail_msg}source: $s_dir, dest: $d_dir\n #获取日志信息fi;
done
echo -e [BACKUP SUCCESS]\n$succ_msg $log_file #输入日志信息到日志文件
echo -e [BACKUP FAILED ]\n$fail_msg $log_file
echo -ne [REMOVE FILES ]\n${rmv_msg} $log_file
echo -e (remove older than files is all above)\n $log_file
15:55 1分钟后 在back1里创建文件 发现有很多文件但没删除因为无差异备份的话不会删除 看back0: 继续一直在back1创建文件在back0也创建
过一会发现有差异备份且过了5分钟的文件都删除了包括前面文件中没有差异备份的。 测试完成 2. Linux定时任务命令 定时任务无非就是在什么时间干什么命令。文件怎么配置?定时任务一般用root执行这里介绍crontabcrontab -e 用户定时任务有语法检查功能。直接编辑系统的定时任务
vim /etc/crontab 可以在里面直接写但一般用crontab -e写
crontab -e
接下来就是怎么去写
* * * * * echo hello
五颗星代表分时日月周
分0-59时0-23 0表示凌晨12点日1-31天月1-12月周0-6天0和7都表示星期天
示例1每天七点半吃早餐
30 07 * * * root echo 吃早餐 #写echo实际当前解释器是看不到的可以通过日志查看
示例2每天晚上11点准时睡觉
00 23 * * * root echo 睡觉
示例3每分钟输出自己的姓名
* * * * * root echo GR
示例4每个小时的第5分钟执行echo hello
5 * * * * root echo hello
示例5每10分钟执行echo hello
10 * * * * root echo hello
示例6早上7点到上午11点执行echo hello
00 7-11 * * * root echo hello
示例7早上7点到上午11点下午一点到下午三点执行echo hello
00 7-11,13-15 * * * root echo hello #用逗号表示间隔 简单看下配置文件
2.1 系统配置文件
/etc/crontab 系统定时任务/var/log/cron 定时任务日志/var/spool/mail/root 是root的邮件信息每执行一次就提示一次信息一般都关闭这个因为影响性能/etc/cron.hourly 每小时执行一次的定时任务配置文件/etc/cron.daily 每天执行一次的定时任务配置文件/etc/cron.weekly 每周执行一次的定时任务配置文件/etc/cron.monthly 每月执行一次的定时任务配置文件/etc/cron.deny 不允许哪个用户进行定时任务
2.2 用户的配置文件
/var/spool/cron/root 用户定时任务vim编辑但不支持语法检查用crontab -e就可以检查了crontab -e 编辑 ----实际写入到/var/spool/cron/ #有语法检测的功能crontab -l 列出定时任务 3 crontab -e
rbShell2.sh的内容删除5分钟前的备份
#!/bin/bash
sour_dirs/home/back1 /home/back0 # 设置要备份的目录列表
dest_dirs/home/backEnd3 # 设置备份目标目录远程或本地
log_file/home/backEnd3/back.log # 设置备份日志文件的路径
date$(date %y%m%d %H:%M:%S) #备份的日期[ ! -d $dest_dirs ] mkdir -p $dest_dirs #如果目标目录不存在就创建
[ ! -d $log_file ] touch $log_file #如果日志文件不存在就创建
echo ${date} $log_file
for s_dir in $sour_dirs
do d_dir$dest_dirs${s_dir}.dir[ ! -f $d_dir ] mkdir -p $d_dir #如果源文件名.dir不存在就创建rdiff-backup $s_dir $d_dir #将源文件分别备份为 源文件名.dirif [ $? 0 ]; then #如果上一个命令没出问题就继续succ_msg${succ_msg}source: $s_dir, dest: $d_dir\n #获取日志信息if [ $? 0 ]; thenrdiff-backup --force --remove-older-than 5m $d_dir #移除5分钟以前的备份文件[ $? 0 ] rmv_msg${rmv_msg}$d_dir\n #获取日志信息fi;elsefail_msg${fail_msg}source: $s_dir, dest: $d_dir\n #获取日志信息fi;
done
echo -e [BACKUP SUCCESS]\n$succ_msg $log_file #输入日志信息到日志文件
echo -e [BACKUP FAILED ]\n$fail_msg $log_file
echo -ne [REMOVE FILES ]\n${rmv_msg} $log_file
echo -e (remove older than files is all above)\n $log_file 3.1 定时测试
次数测试的时候脚本里面是删除30分钟前的 每天的11:20执行一次脚本五个* 分别是分时日月周 执行结果成功执行 如果想每10分钟执行一次怎么写的注意这样写是每小时的第10分钟执行一次
10 * * * * sh /home/rtx/rdiff-backupTest/rdiff-backup_shell/rbShell.sh 目前时间11:25 13:10:后 3.2 每分钟测试
每1分钟自动执行一次在第一颗*后面加/1
*/1 * * * * sh /home/rtx/rdiff-backupTest/rdiff-backup_shell/rbShell.sh
现在是16.14 1分钟后发现自动完成了备份 在back1里创建文件 过了几分钟 因为在16:20又创建了文件过了几分钟发现16:20及之前的文件都被删除了
符合预期 3.3 定时任务注意事项 在定时任务中不识别%需要加转义\% 或者将命令写到脚本里面 执行脚本尽量前面加上sh或者bash使用/server/scripts/backup.sh 需要给脚本执行权限sh /server/scripts/backup.sh 不需要脚本执行权限 执行脚本的结果定时任务的结果定向到空或者文件中在执行每条定时任务后系统会自动给用户发送文件信息/var/spool/mail/root 对于有用户访问的服务器会将邮件功能关闭 以减少性能损失关闭后定时任务执行后发邮件发布出去会生成临时的小文件执行一行定时任务会执行一个小文件小文件越多会导致inode不够用无法写入数据到磁盘。 查看邮件功能是否开启
systemctl stat postfix.service
关闭邮件功能
systemctl stop postfix.service 避免不必要的程序及命令输出比如tar zcftar zcvf不用v 打包尽量到相对路径一般打包都先cd在tar但是当前解释器不会真的cd而是在新的解释器下所以不影响当前界面。 定时任务的脚本中程序尽量使用绝对路径用户定时任务识别的PATH变量只有/usr/bin/和/bin目录使用crontab定义定时任务时 只去/usr/bin/和/bin下面查找任务比如使用ntpdate就成功不了可以去查看邮件邮件辅助我们排查问题 写定时脚本的流程
命令行可以执行成功写入脚本执行脚本可以执行成功写入定时任务进行测试排查问题结果postfix开启邮件个人经验 3.4 实际测试
#!/bin/bash
sour_dirs/home/data # 设置要备份的目录列表
dest_dirs/home/back/databack # 设置备份目标目录远程或本地
log_file/home/back/back.log # 设置备份日志文件的路径
date$(date %Y%m%d %H:%M:%S) #备份的日期[ ! -d $dest_dirs ] mkdir -p $dest_dirs #如果目标目录不存在就创建
[ ! -d $log_file ] touch $log_file #如果日志文件不存在就创建
echo ${date} $log_file
for s_dir in $sour_dirs
do d_dir${dest_dirs}[ ! -f $d_dir ] mkdir -p $d_dir #如果源文件名.dir不存在就创建rdiff-backup $s_dir $d_dir #将源文件分别备份为 源文件名.dirif [ $? 0 ]; then #如果上一个命令没出问题就继续succ_msg${succ_msg}source: $s_dir, dest: $d_dir\n #获取日志信息if [ $? 0 ]; thenrdiff-backup --force --remove-older-than 7D $d_dir[ $? 0 ] rmv_msg${rmv_msg}$d_dir\n #获取日志信息fi;elsefail_msg${fail_msg}source: $s_dir, dest: $d_dir\n #获取日志信息fi;
done
echo -e [BACKUP SUCCESS]\n$succ_msg $log_file #输入日志信息到日志文件
echo -e [BACKUP FAILED ]\n$fail_msg $log_file
echo -ne [REMOVE FILES ]\n${rmv_msg} $log_file
echo -e (remove older than files is all above)\n $log_file 3.5 测试睡眠时产生多个文件
睡眠一分钟一分钟内创建了一个目录进入新创建的目录在里面创建一个文件和一个目录 发现睡眠和创建文件都执行了多次一分钟一次用创建精确到秒的txt文件来代替调用脚本现在测试一下用天的日期作为flag来让其一天执行一次类似调用脚本的操作。
测试以下shell.sh
#!/bin/bash # 设置要监视的目录路径
FILE_PATH/home/data# 注意这里只使用 path 变量并忽略 action 和 file因为它们不是默认输出的一部分
inotifywait -mr -e create $FILE_PATH | while read path action file; do# 假设 path 变量现在包含完整的文件路径log_file/home/rtx/log/monitor1_log/$(date %Y-%m-%d).log# 如果文件存在就进入下一次监控保证else后面的代码一天只执行一次if [ -f $log_file ];echo $(date %Y-%m-%d %H:%M:%S)目录 $FILE_PATH 里 $file 已被 $action echo 日志存在进入下一次监控else# 如果日志文件不存在且不是目录则创建它 sleep 60touch $log_file# 所有输出重定向到当天的日志文件exec $log_file 21echo $(date %Y-%m-%d %H:%M:%S)目录 $FILE_PATH 里 $file 已被 $action echo ---------------------------------------echo 脚本被调用touch /home/rtx/Test$(date %Y-%m-%d-%H-%M-%S).txtfi
done3.6 最终备份脚本 #!/bin/bash
sour_dirs/home/home /home/admin # 设置要备份的目录列表
dest_dirs/home/back # 设置备份目标目录远程或本地
log_file/home/log/back_log/$(date %Y-%m-%d).log # 设置备份日志文件的路径
date$(date %Y-%m-%d %H:%M:%S) #备份的日期[ ! -d $dest_dirs ] mkdir -p $dest_dirs #如果目标目录不存在就创建
[ ! -d $log_file ] touch $log_file #如果日志文件不存在就创建
# 所有输出重定向到当天的日志文件
exec $log_file 21
echo ${date}
for s_dir in $sour_dirs
dod_dir$dest_dirs${s_dir}_back[ ! -f $d_dir ] mkdir -p $d_dir #如果源文件名.dir不存在就创建rdiff-backup $s_dir $d_dir #将源文件分别备份为 源文件名_backif [ $? 0 ]; then #如果上一个命令没出问题就继续succ_msg${succ_msg}source: $s_dir, dest: $d_dir\n #获取日志信息if [ $? 0 ]; thenrdiff-backup --force --remove-older-than 6M $d_dir #移除6个月以前的备份文件[ $? 0 ] rmv_msg${rmv_msg}$d_dir\n #获取日志信息fi;elsefail_msg${fail_msg}source: $s_dir, dest: $d_dir\n #获取日志信息fi;
done
echo -e [BACKUP SUCCESS]\n$succ_msg #输入日志信息到日志文件
echo -e [BACKUP FAILED ]\n$fail_msg
echo -ne [REMOVE FILES ]\n${rmv_msg}
echo -e (remove older than files is all above)\n 监控Linux目录差异 inotifywait 是一个用于监控文件系统事件的命令行工具属于 inotify-tools 软件包。它基于 Linux 内核的 inotify 功能可以实时监听文件或目录的变化如创建、删除、修改等事件。
安装所用工具
sudo yum install inotify-tools 命令行运行后可以发现输出了三个字段这三个字段在后面的脚本可用可不用。
运行脚本
#!/bin/bash # 设置要监视的目录路径
FILE_PATH/home/data # 初始化日志可选有助于确认脚本已启动
echo 开始监视目录 $FILE_PATH...# 监视文件修改和创建事件还可监视删除打开关闭等
# 注意这里只使用 path 变量忽略 action 和 file因为它们不是默认输出的一部分
inotifywait -mr -e modify,create $FILE_PATH | while read path; do sleep 10# 可以添加对特定文件的条件检查或调用其他脚本 # 例如if [ $path $FILE_PATH/specific_file.txt ]; then ... fi # 调用脚本/home/data/shell.sh
done# nohup /home/shell.sh /home/test.log 21
-m 选项表示以监视模式运行即持续监控而非一次性运行。-r 选项表示递归监视指定目录及其子目录。-e modify,create 指定监视的事件类型这里监视文件的修改和创建。$FILE_PATH 是要监视的目录路径。| 将 inotifywait 的输出传递给后续的 while read 循环。while read path; do 循环从 inotifywait 的输出中读取每一行path 变量包含了文件路径和事件信息inotifywait 的默认输出中通常包括事件的路径和操作
输入以下命令在后台运行上面的脚本
nohup /home/shell.sh /home/test.log 21
nohup允许脚本在你退出终端后继续运行。/home/shell.sh脚本的完整路径。 /home/test.log将标准输出重定向到 test.log 文件。21将标准错误也重定向到 test.log 文件。将命令放到后台执行。 如果在脚本里输出了日志到其他文件可以把标准输出重定向到空文件
nohup /home/rtx/shell.sh /dev/null 21 FILE_PATH/home/rtx/data # 注意这里只使用 path 变量并忽略 action 和 file因为它们不是默认输出的一部分
inotifywait -mr -e modify,create $FILE_PATH | while read path; do # 假设 path 变量现在包含完整的文件路径sleep 7log_file/home/rtx/log/$(date %Y-%m-%d).log# 如果日志文件不存在且不是目录则创建它 [ ! -f $log_file ] touch $log_file# 所有输出重定向到当天的日志文件exec $log_file 21echo ---------------------------------------echo $(date %Y-%m-%d %H:%M:%S)目录 $FILE_PATH 里 $path 已被修改或创建# 在这里可以添加对特定文件的条件检查或调用其他脚本 # 例如if [ $path $FILE_PATH/specific_file.txt ]; then ... fi # 调用脚本如果需要 # script.sh $path
done最终测试
把前面定时任务的脚本改一下日志
#!/bin/bash
sour_dirs/home/data # 设置要备份的目录列表
dest_dirs/home/back/databack # 设置备份目标目录远程或本地
log_file/home/log/back_log/$(date %Y-%m-%d).log # 设置备份日志文件的路径
date$(date %Y-%m-%d %H:%M:%S) #备份的日期
[ ! -d $dest_dirs ] mkdir -p $dest_dirs #如果目标目录不存在就创建
[ ! -d $log_file ] touch $log_file #如果日志文件不存在就创建
# 所有输出重定向到当天的日志文件
exec $log_file 21
echo ${date}
for s_dir in $sour_dirs
do d_dir${dest_dirs}[ ! -f $d_dir ] mkdir -p $d_dir #如果源文件名.dir不存在就创建rdiff-backup $s_dir $d_dir #将源文件分别备份为 源文件名.dirif [ $? 0 ]; then #如果上一个命令没出问题就继续succ_msg${succ_msg}source: $s_dir, dest: $d_dir\n #获取日志信息if [ $? 0 ]; thenrdiff-backup --force --remove-older-than 7D $d_dir[ $? 0 ] rmv_msg${rmv_msg}$d_dir\n #获取日志信息fi;elsefail_msg${fail_msg}source: $s_dir, dest: $d_dir\n #获取日志信息fi;
done
echo -e [BACKUP SUCCESS]\n$succ_msg #输入日志信息到日志文件
echo -e [BACKUP FAILED ]\n$fail_msg
echo -ne [REMOVE FILES ]\n${rmv_msg}
echo -e (remove older than files is all above)\n
监控脚本改一下日志和调用上面的脚本
#!/bin/bash # 设置要监视的目录路径
FILE_PATH/home/rtx/data # 注意这里只使用 path 变量并忽略 action 和 file因为它们不是默认输出的一部分
inotifywait -mr -e modify,create $FILE_PATH | while read path; do # 假设 path 变量现在包含完整的文件路径sleep 7log_file/home/log/monitor_log/$(date %Y-%m-%d).log# 如果日志文件不存在且不是目录则创建它 [ ! -f $log_file ] touch $log_file# 所有输出重定向到当天的日志文件exec $log_file 21echo ---------------------------------------echo $(date %Y-%m-%d %H:%M:%S)目录 $FILE_PATH 里 $path 已被修改或创建# 在这里可以添加对特定文件的条件检查或调用其他脚本 # 例如torif [ $path $FILE_PATH/specific_file.txt ]; then ... fi # 调用脚本如果需要 # script.sh $path /home/shellTest.sh
done 数据也备份了 测试普通用户监视 最终监控脚本
#!/bin/bash # 设置要监视的目录路径
FILE_PATH/home/data error_log/home/admin/log/error.log #错误日志确保创建好因为还没重定向到每天的日志# 设置日志目录下面还会创建每天的日志文件
LOG_DIR/home/admin/log/auto_monitor_log
if [ ! -d $LOG_DIR ]; thenmkdir -p $LOG_DIR #如果目标目录不存在就创建if [ $? -ne 0 ]; then #如果上一条命令不正常echo $(date %Y-%m-%d %H:%M:%S) 无法创建日志目录 $LOG_DIR $error_logfi
fi# 监控上面目录的创建操作把输出读取到pathactionfile三个变量里
inotifywait -mr -e create $FILE_PATH | while read path action file; do # 定义当天的日志文件log_file$LOG_DIR/$(date %Y-%m-%d).logsleep 1# 如果文件存在就进入下一次监控保证else后面的代码一天只执行一次if [ -f $log_file ]; thenecho $(date %Y-%m-%d %H:%M:%S)目录 $FILE_PATH 里 $file 已被 $action echo $log_file 日志存在进入下一次监控else # 如果日志文件不存在且不是目录则创建它 sleep 60touch $log_fileif [ $? -ne 0 ]; then #如果上一条命令不正常echo $(date %Y-%m-%d %H:%M:%S) 无法创建日志文件 $log_file $error_logfi# 所有输出重定向到当天的日志文件exec $log_file 21echo $(date %Y-%m-%d %H:%M:%S)目录 $FILE_PATH 里 $file 已被 $action echo $(date %Y-%m-%d %H:%M:%S) 脚本被调用echo ---------------------------------------fi
done本篇完。