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

背景现象

使用 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为你的实际值。

  • 9
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值