欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > 文件进行周期性备份后权限更改的解决方案--使用脚本和定时任务

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

2024/11/30 12:35:35 来源:https://blog.csdn.net/lisainan66/article/details/140015979  浏览:    关键词:文件进行周期性备份后权限更改的解决方案--使用脚本和定时任务

这里写目录标题

  • 背景现象
  • 解决方案
    • 原因分析
    • 面临的问题
    • 解决思路
    • 操作步骤
      • 每个文件夹权限分配表
      • 测试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为你的实际值。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com