文件进行周期性备份后权限更改的解决方案--使用脚本和定时任务

news2024/11/24 16:09:38

这里写目录标题

  • 背景现象
  • 解决方案
    • 原因分析
    • 面临的问题
    • 解决思路
    • 操作步骤
      • 每个文件夹权限分配表
      • 测试chmod和chown两个命令是否可行
      • 写脚本实现定时同步
      • 同时修改权限
    • 异地同步改权限
      • 在NAS上生成SSH密钥对
      • 将NAS的公钥复制到Linux服务器
      • 在NAS上编写同步脚本
      • 在NAS上执行脚本,保存脚本
      • 确保它有执行权限
      • 使用 cron 进行定期备份

背景现象

使用 rsync 从一台 Linux 服务器备份文件到 NAS(网络附加存储)时,备份过来的文件的所有者和组都变成了 ,而且权限也改了。在这里插入图片描述
权限与之前不一致,和源服务器的权限一样了
在这里插入图片描述Linux上的权限
在这里插入图片描述
用户也更改了,大部分都变成了root
在这里插入图片描述

解决方案

原因分析

1、rsync 命令以 root 用户身份运行(图形化界面是用root登录的),导致备份的文件默认所有者是 root。
2、NAS 可能有自己的权限管理机制,并且可能不保留原始文件的所有者和组信息。
3、rsync 的 --owner 和 --group 选项可能没有启用,或者由于权限问题无法设置正确的所有者和组。

面临的问题

现在共享的一共有三个数据集,也对应三个人sync任务,为了便于理解,父数据集就叫1号文件夹,子数据集分别叫2号和3号
在这里插入图片描述
每个数据集权限都得重新改

解决思路

使用chmod和chown命令恢复文件权限
chmod命令:用于修改文件或目录的权限。可以使用数字权限表示法(如chmod 755 filename)或符号权限表示法(如chmod u+x filename)。
chown命令:用于修改文件或目录的所有者和所属组。例如,chown user1:group1 filename会将文件filename的所有者更改为user1,所属组更改为group1。

因为这个异地同步,采用了图形化上面自带的rsync同步,要更改权限还需要结合命令(使用图形化更改也可以,但是我这个权限有些特殊,使用命令更简单,而且我不想每次同步完还要手动的去点击图形化的界面),所以打算使用命令先进行本地定时同步并同时更改权限。
使用命令进行同步,并且每次同步之后都要进行权限修改这个操作,那就一起写到批命令里,同步结束,紧跟着做权限更改。然后再用定时任务执行一下。

操作步骤

每个文件夹权限分配表

下表是我的业务需求,我要更改其中三个的权限和用户及用户组
在这里插入图片描述

测试chmod和chown两个命令是否可行

chown user1:group1 filename

用户统一了,权限还不一致
在这里插入图片描述

chmod -R 770 "路径"

权限更改了,有一个特殊的是rsync的配置文件
在这里插入图片描述
使用 chmod -R 770 “路径” 命令来更改目录及其子文件和子目录的权限时,通常它会递归地应用权限到指定路径下的所有文件和目录。但是,导致 rsync 的配置文件(或任何其他特定文件)的权限没有被更改的原因可能是其特殊的属性,或者文件可能被另一个进程锁定,这可能会阻止权限更改。还可能是rsync 守护进程正在运行并且打开了配置文件,那么更改文件权限可能不会立即生效,因为守护进程可能仍然具有旧的权限。可能需要重启 rsync 守护进程来使更改生效。但是这个不影响使用,暂时先不理会了。

写脚本实现定时同步

1、创建脚本文件
首先,需要使用文本编辑器(如 nano, vim, emacs 等)来创建一个新的脚本文件。这里假设使用 vim 编辑器,并且将脚本命名为 backup.sh。
打开终端,并输入以下命令:
vim /path/to/your/scripts/backup.sh
/path/to/your/scripts/ 是你想保存脚本的目录,可以替换为自己的目录路径。
2、编辑脚本

#!/bin/bash

# 设置源目录和目标目录
SOURCE_DIR="/mnt/test"
BACKUP_DIR="/mnt/dms/20/test"

# 使用rsync进行备份
# -av 表示以归档模式传输,并保持所有文件属性
# --delete 表示删除目标目录中源目录中没有的文件(使目标目录成为源目录的镜像)
rsync -av --delete "$SOURCE_DIR/" "$BACKUP_DIR/"

# 你可以在这里添加其他命令,比如发送备份完成的通知等
echo "Backup completed successfully."

确保将 SOURCE_DIR 和 BACKUP_DIR 替换为你自己的源目录和目标目录路径。
保存,退出编辑器
3. 为脚本添加执行权限
了使脚本能够运行,需要为其添加执行权限。在终端中,使用 chmod 命令:

chmod +x /root/backup.sh

4. 手动运行脚本以测试
在添加执行权限后,可以手动运行脚本来测试它是否按预期工作:

/path/to/your/scripts/backup.sh

应该能看到脚本执行的输出,包括 “Backup completed successfully.” 这条消息。

如果已经导航到包含该脚本的目录,可以使用 ./ 来指定当前目录:
在这里插入图片描述
5. 使用 cron 进行定期备份

现在,已经有了一个可以正常工作的备份脚本,可以使用 cron 来定期运行它。
打开当前用户的 crontab 文件:(一定使用这个命令,而不是vim

crontab -e

然后,添加一行来指定你想运行脚本的时间和频率。例如,如果你想每天凌晨 1 点运行备份脚本,你可以添加以下行:
0 1 * * * /root/backup.sh
在这里插入图片描述

保存并退出编辑器。现在,你的脚本将按照指定的时间自动运行。
实验成功
注意事项
● 确保源目录和目标目录都是可访问的,并且rsync命令有足够的权限来读取源目录和写入目标目录。

同时修改权限

再次编辑backup.sh

 chown -R 用户:用户组 路径
chmod -R 770 "路径"

在这里插入图片描述
保存,退出
手动测试 ./ backup.sh
在这里插入图片描述
检查更改结果,成功
在这里插入图片描述

异地同步改权限

异地和本地思路相同,可以都使用命令进行,我的需求是这样的,在NAS上建立这个脚本,用于从一台Linux服务器拉取文件(即NAS是客户端,Linux服务器是源),那么需要确保NAS能够SSH到Linux服务器,而不需要密码输入。这通常是通过在NAS上放置Linux服务器的SSH公钥(通常称为"免密码登录"或"SSH密钥认证")来实现的。
具体操作可以参考我的另一篇文章,思路一致
链接: Linux通过 SSH 使用 rsync 进行文件传输
大致思路是:

在NAS上生成SSH密钥对

将NAS的公钥复制到Linux服务器

在NAS上编写同步脚本


	#!/bin/bash  

	# Linux服务器的SSH地址和目录  

	REMOTE_USER="username"  

	REMOTE_HOST="linux-server-ip"  

	REMOTE_DIR="/path/to/source/directory"  

	LOCAL_DIR="/path/to/target/directory"  

	# 使用rsync从远程服务器拉取文件  

	rsync -avz --delete "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/" "$LOCAL_DIR"  
	  

	# (可选)如果你需要设置特定的权限和用户/组,可以在这里添加命令  

	# 例如,为本地目录设置权限和用户/组  

	 chown -R user:group "$LOCAL_DIR"  

	 chmod -R 755 "$LOCAL_DIR"  

	  

	# 脚本结束提示  

	echo "Synchronization complete."

在NAS上执行脚本,保存脚本

确保它有执行权限

chmod +x /path/to/your/script.sh

使用 cron 进行定期备份

crontab -e

添加脚本的时间和频率

0 1 * * * /root/backup.sh

注意事项
确保NAS和Linux服务器之间的网络连接是安全的,并且你信任这两个系统。
替换脚本中的username、linux-server-ip、/path/to/source/directory和/path/to/target/directory为你的实际值。

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

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

相关文章

记录一次OPDS trunc()函数使用错误

说明:本文介绍 场景 在一次SQL查询时,需要对结果值保留两位小数,不四舍五入,直接截取到小数点后两位。如 59.156到59.15,23.2134到23.21,查看官方帮助文档(https://help.aliyun.com/zh/maxcom…

【分享】30秒在线自助制作电子证件照

近期由于自己需要制作电子证件照,所以在网上找在线制作电子证件照的网站,找了很多网站都是收费的,也下载了很多app制作,都是要收费的。最后,所以索性自己开发一个网站制作电子证件照。这里分享给需要的朋友。&#xff…

探索Android架构设计

Android 应用架构设计探索:MVC、MVP、MVVM和组件化 MVC、MVP和MVVM是常见的三种架构设计模式,当前MVP和MVVM的使用相对比较广泛,当然MVC也并没有过时之说。而所谓的组件化就是指将应用根据业务需求划分成各个模块来进行开发,每个…

14、电科院FTU检测标准学习笔记-录波功能2

作者简介: 本人从事电力系统多年,岗位包含研发,测试,工程等,具有丰富的经验 在配电自动化验收测试以及电科院测试中,本人全程参与,积累了不少现场的经验 ———————————————————…

力扣:203. 移除链表元素(Java)

目录 题目描述:示例 1:示例 2:代码实现: 题目描述: 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 示例 1: 输入…

C++学习笔记---POCO库

在Windows系统中安装POCO 1)安装OpenSSL POCO编译安装依赖OpenSSL,如果未安装OpenSSL则应该先安装OpenSSL。 假设将OpenSSL安装在C:\OpenSSL-Win64,将C:\OpenSSL-Win64、C:\OpenSSL-Win64\lib添加到PATH环境变量中2)安装POCO 将p…

这不是危言耸听!时序Transformer颠覆传统,历史级突破!

【时间序列Transformer】在近年来的深度学习领域中备受关注,它通过将Transformer架构应用于时间序列数据,显著提升了模型在长时间依赖建模和复杂模式识别任务中的表现。时间序列Transformer技术已经在金融预测、气象预报和健康监测等多个领域取得了显著成…

PNAS|这样也可以?拿别人数据发自己Paper?速围观!

还在为数据量小,说服力不足发愁? 想研究脱颖而出、眼前一亮? 想从更高层次的探索微生物的奥秘,发出一篇好文章? 近期,有一篇发表在PNAS(IF11.1)的文章“Deforestation impacts soil biodiversity and ecos…

Swift 周报 第五十六期

文章目录 前言新闻和社区苹果与消费者修改 3500 万美元 iPhone 音响和解协议苹果(AAPL.US)因监管担忧今年不会在欧盟推出 AI 功能苹果暂停高端 Vision 头戴设备研发 计划推出更廉价版 Swift论坛推荐博文话题讨论关于我们 前言 本期是 Swift 编辑组自主整理周报的第五十六期&am…

小红书2024LLM论文分享

2024小红书大模型论文分享 BatchEval基于LLM评估LLM生成文本的质量 ACL2024 https://ypw0102.github.io/ 如果文本评价需要多个维度,需要调整BatchEval么? 目前是完整流程走一遍的,因此没有具体考虑细粒度。 评测连续的数据域,S…

JavaScript中的Date对象,以及常用格式化日期的方法封装

一、Date对象 二、操作Date对象 1、创建Date对象 (1)常用方法 (2)使用示例 2、获取日期 (1)常用方法 (2)使用示例 3、设置日期 (1)常用方法 &…

youlai-boot项目的学习(3) 本地redis、MinIO的安装与配置

youlai-boot项目除了使用mysql数据库、还有redis,以及OSS服务,OSS除了云OSS服务,还有自部署的MinIO服务。 前面我们已经安装好了mysql数据库,那么我们来看看本地redis、MinIO服务怎么部署 环境 mac OS, iterm2&#…

中霖教育怎么样?注册会计师考试难吗?

中霖教育:注册会计师(CPA)考试的难度高吗? 对于不同背景的考生来说,注册会计师考试的挑战程度不同。那些有良好基础和充裕准备时间的考生,通过考试的可能性要超过那些从零开始且准备时间有限的人。 据最近…

YOLO目标检测综述(2024.6月最新!)

1 基本概念 目标检测(Object Detection)是计算机视觉领域的重要任务之一,旨在识别图像或视频中的特定目标并将其位置标记出来。与图像分类任务不同,目标检测要求不仅能够识别目标类别,还需要精确地定位目标的位置。由于…

1.2章节input输入函数语法使用和示例

在Python中,input() 函数用于从用户获取输入。这个函数会等待用户输入一行文本,然后按回车键,最后将输入的文本作为字符串返回。 一、基本语法 当你运行上面的代码时,它会打印出 "请输入一些文字: ",然后等…

.idea文件夹里面iml文件有啥用

.idea文件夹和其中的.iml文件对于IntelliJ IDEA项目非常重要,它们共同构成了IDEA对项目理解的基础。让我们详细了解一下这两者的作用: .idea文件夹 .idea文件夹包含了IntelliJ IDEA项目的所有配置信息,包括但不限于: 编译器设置…

jmeter之接口数据与数据库数据检验!

前言 本文讲解使用jmeter测试接口,然后与数据库里面的数据进行校验对比。本节使用一个新增数据的接口,新增一条数据,然后在数据库里面进行查询,是否能够查询到此条数据。 一、接口环境搭建 1.1 新建一个http请求,写…

3d合并模型一直加载有哪些原因---模大狮模型网

当在3D软件中合并3d模型时,可能会遇到加载时间过长或持续加载的情况。这可能是由以下原因之一引起的: 一:模型复杂度 合并的模型可能非常复杂,包含大量的面片、顶点或纹理等。这会增加加载和处理的时间。解决方法是优化模型&…

希喂生骨肉冻干值得入手吗?拯救瘦弱、增强抵抗力最强主食测评!

希喂生骨肉冻干值得入手吗?很多小姐妹觉着自家猫咪太瘦了、体质不咋好,换季还敏感、掉毛、不吃东西,听说生骨肉冻干好吸收、营养好,可以改善体质、拯救瘦弱、增强抵抗力,为了图省事,开始盲入生骨肉冻干&…

常见的Java开发难题包含解决办法内存泄漏异常处理代码质量和维护

常见的Java开发难题包含解决办法内存泄漏异常处理代码质量和维护 学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……) 2、学会Oracle数据库入门到入土用法(创作中……) 3、手把手教你开发炫酷的vbs脚本制作(完善中……) 4、牛逼哄哄的 I…