Linux内网离线用rsync和inotify-tools实现文件夹文件单向同步和双向同步
lsyncd实现方式可参考:https://www.jianshu.com/p/c075ccf89516
安装文件下载:相关文件下载
rsync默认都有,所以没有提供。
服务端和客户端均操作
服务端:双向同步其实都是服务端,只是单向同步时稍有区别
客户端:双向同步其实都是服务端
1、创建服务端和客户端密码文件
echo rsync_zyc_server:123456 > /etc/rsync_zyc_server.password
echo 123456 > /etc/rsync_zyc_client.password
# 修改密码访问权限,必须改
chmod 600 /etc/rsync_*
rsync_zyc_server.password:rsync服务配置里需要用到的认证文件和用户名
rsync_zyc_client.password:连接其他服务器的rsync服务时所需的密码文件
2、修改rsync配置文件并启动文件同步服务
vi /etc/rsyncd.conf
# /etc/rsyncd: configuration file for rsync daemon mode# See rsyncd.conf man page for more options.# configuration example:# uid = nobody
# gid = nobody
# use chroot = yes
# max connections = 4
# pid file = /var/run/rsyncd.pid
# exclude = lost+found/
# transfer logging = yes
# timeout = 900
# ignore nonreadable = yes
# dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2# [ftp]
# path = /home/ftp
# comment = ftp export area# 端口
port =10873
# 以 xxxx 用户启动进程
uid = root
gid = root# 无需让rsync以root身份运行,允许接收文件的完整属性
fake super = yes# 禁锢推送的数据至某个目录,不允许跳出该目录
# 允许chroot,提升安全性,客户端连接模块,首先chroot到模块path参数指定的目录下
# chroot为yes时必须使用root权限,且不能备份path路径外的链接文件
use chroot = no# 最大连接数
max connections = 200# 超时时间
timeout = 300# pid文件路径
pid file = /var/run/rsyncd.pid# 锁文件路径
lock file = /var/run/rsync.lock# 剔除某些文件或目录不同步
exclude = lost+found/# 记录传输文件日志
transfer logging = yes# 指定日志文件
log file = /var/log/rsyncd_zyc.log# 日志文件格式
log format = %t %a %m %f %b# 忽略错误信息
ignore errors# 对备份数据可读写
read only = false# 不允许查看模块信息
list = false# 定义虚拟用户,作为连接认证用户
auth users = rsync_zyc_server# 定义rsync服务用户连接认证密码文件路径
secrets file = /etc/rsync_zyc_server.password# 设置不需要压缩的文件
dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2# 定义模块信息
[zycFileSync]
# 模块注释信息
comment = "双向同步目录测试"
# 定义备份数据目录,此处根据实际调整
path = /root/fileSyncRpm/testFiles/[zycDatabaseSync]
comment = "数据库备份文件单向同步测试"
path = /root/fileSyncRpm/testDatabase/
3、安装inotify-tools
上传下载好的epel-release-7-11.noarch.rpm和inotify-tools-3.14-9.el7.x86_64.rpm
安装:rpm -iv *.rpm
服务端操作
双向同步的脚本:
vi /root/fileSyncRpm/inotify.sh
# 启动文件同步服务
rsync --daemon# 远程主机ip地址
host=192.168.0.212# 本地服务器同步目录(即同步该目录内的文件和子目录)
src=/root/fileSyncRpm/testFiles/# 远程服务器 rsync 服务模块名
des=zycFileSync# rsync服务用户连接认证密码文件路径
password=/etc/rsync_zyc_client.password# 连接认证用户
user=rsync_zyc_server# inotifywait 程序路径
inotifywait=/usr/bin/inotifywait# 监听文件变化进行传输
$inotifywait -mrq -e 'modify,delete,create,attrib' $src |while read files;
dorsync -azP $src $user@$host::$des --port=10873 --password-file=${password};# 日志,可视情况开启# echo "${files} was rsynced!" >> ./rsync_inotify.log 2>&1;done
单向同步的脚本:
vi /root/fileSyncRpm/databaseInotify.sh
# 启动文件同步服务
rsync --daemon# 远程主机ip地址
host=192.168.0.212# 本地服务器同步目录(即同步该目录内的文件和子目录)
src=/root/fileSyncRpm/testDatabase/# 远程服务器 rsync 服务模块名
des=zycDatabaseSync# rsync服务用户连接认证密码文件路径
password=/etc/rsync_zyc_client.password# 连接认证用户
user=rsync_zyc_server# inotifywait 程序路径
inotifywait=/usr/bin/inotifywait# 监听文件变化进行传输
$inotifywait -mrq -e 'modify,delete,create,attrib' $src |while read files;
dorsync -azP $src $user@$host::$des --port=10873 --password-file=${password};# 日志,可视情况开启# echo "${files} was rsynced!" >> ./rsync_inotify.log 2>&1;done
启动单向同步和双向同步脚本(手动)
nohup sh inotify.sh > inotify.log 2>&1 &
nohup sh databaseInotify.sh > databaseInotify.log 2>&1 &
客户端操作
双向同步的脚本:
vi /root/fileSyncRpm/inotify.sh
# 启动文件同步服务
rsync --daemon# 远程主机ip地址
host=192.168.0.211# 本地服务器同步目录(即同步该目录内的文件和子目录)
src=/root/fileSyncRpm/testFiles/# 远程服务器 rsync 服务模块名
des=zycFileSync# rsync服务用户连接认证密码文件路径
password=/etc/rsync_zyc_client.password# 连接认证用户
user=rsync_zyc_server# inotifywait 程序路径
inotifywait=/usr/bin/inotifywait# 监听文件变化进行传输
$inotifywait -mrq -e 'modify,delete,create,attrib' $src |while read files;
dorsync -azP $src $user@$host::$des --port=10873 --password-file=${password};# 日志,可视情况开启# echo "${files} was rsynced!" >> ./rsync_inotify.log 2>&1;done
启动双向同步脚本(手动)
nohup sh inotify.sh > inotify.log 2>&1 &
测试
在服务端和客户端创建文件测试
cd /root/fileSyncRpm/testFiles
touch b.1
设置开机自启动
创建服务单元文件:在 /etc/systemd/system 目录下创建一个新的服务单元文件,例如 zycFileInotify.service。 打开终端并运行:
vi /etc/systemd/system/zycFileInotify.service
[Unit]
Description=Inotify File Sync Script
After=network.target[Service]
Type=simple
ExecStart=/bin/bash /root/fileSyncRpm/inotify.sh
Restart=on-failure[Install]
WantedBy=multi-user.target
这里 ExecStart 行指定了要执行的脚本位置。
加载并启用服务:保存并关闭文件后,运行以下命令来加载服务并设置开机启动:
sudo systemctl daemon-reload
sudo systemctl enable zycFileInotify.service
sudo systemctl start zycFileInotify.service
sudo systemctl status zycFileInotify.service
相关文章:
Linux内网离线用rsync和inotify-tools实现文件夹文件单向同步和双向同步
lsyncd实现方式可参考:https://www.jianshu.com/p/c075ccf89516 安装文件下载:相关文件下载 rsync默认都有,所以没有提供。 服务端和客户端均操作 服务端:双向同步其实都是服务端,只是单向同步时稍有区别 客户端&am…...
Spring Security学习笔记(二)Spring Security认证和鉴权
前言:本系列博客基于Spring Boot 2.6.x依赖的Spring Security5.6.x版本 上一篇博客介绍了Spring Security的整体架构,本篇博客要讲的是Spring Security的认证和鉴权两个重要的机制。 UsernamePasswordAuthenticationFilter和BasicAuthenticationFilter是…...
产品经理NPDP好考吗?
NPDP是新产品开发专业人员的资格认证,对于希望在产品管理领域取得认可的专业人士来说,NPDP认证是一项重要的资格。 那么,产品经理考取NPDP资格认证究竟难不难呢? 首先,NPDP考试的难易程度取决于考生的背景和准备情况…...
【C++】:红黑树的应用 --- 封装map和set
点击跳转至文章:【C】:红黑树深度剖析 — 手撕红黑树! 目录 前言一,红黑树的改造1. 红黑树的主体框架2. 对红黑树节点结构的改造3. 红黑树的迭代器3.1 迭代器类3.2 Begin() 和 End() 四,红黑树相关接口的改造4.1 Find…...
unity美术资源优化(资源冗余,主界面图集过多)
图片资源冗余: UPR unity的性能优化工具检查资源 1.检查纹理读/写标记 开启纹理资源的读/写标志会导致双倍的内存占用 检查Inspector -> Advanced -> Read/Write Enabled选项 2.检查纹理资源alpha通道 如果纹理的alpha通道全部为0,或者全部为2…...
【git】github中的Pull Request是什么
在 Git 中,"pull request"(简称 PR)是一种在分布式版本控制系统中使用的功能,特别是在使用 GitHub、GitLab、Bitbucket 等基于 Git 的代码托管平台时。Pull Request 允许开发者请求将他们的代码更改合并到另一个分支&am…...
gitlab查询分支API显示不全,只有20个问题
背景 gitlab查询分支API需要查询所有分支,且分支数量大于20,但目前调用接口返回的branch最多就显示了20个 解决方案 根据GitLab的文档,查询分支API默认最多返回20个分支。如果要一次性显示80个分支,可以使用分页参数来获取所有…...
vue3+vite 实现动态引入某个文件夹下的组件 - glob-import的使用
<template><div class"user-content"><HeaderTitle title"用户详情"></HeaderTitle><div class"main-content"><div><UserForm /></div><div><TableList></TableList></d…...
hhhhh
x torch.tensor([1.0,0.],[-1.,1.],requires_gradTrue) z x.pow(2).sum() z.backward() x.grad在这段代码中,我们利用 PyTorch 进行自动求梯度,下面详细解释代码的每一个部分及其在反向传播中的作用。同时,我们也将介绍函数对象和叶子节点的…...
扫雷小游戏纯后端版
package com.wind;import java.util.Random; import java.util.Scanner;public class ResultLei {static Random random new Random();public static void main(String[] args) {boolean end true;while (end) {System.out.println("请输入你选择的难度对应的数字&#…...
RuoYi-Vue-Plus(动态添加移除数据源)
一、添加数据 private final DynamicRoutingDataSource dynamicRoutingDataSource;private final DefaultDataSourceCreator dataSourceCreator;//添加一个dynamic的数据源@GetMapping("createDynamic")public void createDynamic() {DataSourceProperty property =…...
idea启动项目报:the command line via JAR manifest or via a classpath file and rerun.
解决方案 1.打开Edit Configurations,进去编辑,如下: 笔记配置 2.选择Modfiy options,点击Shorten command line 3.在新增的Shorten command line选项中选择JAR manifest或classpath file 4.点击保存后即可...
vue3 + ts中有哪些类型是由vue3提供的?
在 Vue 3 中结合 TypeScript 使用时,Vue 提供了一系列的类型帮助函数和接口,这些类型用于增强 TypeScript 的集成和提供类型安全。以下是一些由 Vue 3 提供的常用 TypeScript 类型: RefType: 用于标注一个 ref 返回的响应式引用类型。Reacti…...
【Linux】远程连接Linux虚拟机(MobaXterm)
【Linux】远程连接Linux虚拟机(MobaXterm) 零、原因 有时候我们在虚拟机中操作Linux不太方便,比如不能复制粘贴,不能传文件等等,我们在主机上使用远程连接软件远程连接Linux虚拟机后可以解决上面的问题。 壹、软件下…...
LeetCode Hot100 生成特殊数字的最少操作
给你一个下标从 0 开始的字符串 num ,表示一个非负整数。 在一次操作中,您可以选择 num 的任意一位数字并将其删除。请注意,如果你删除 num 中的所有数字,则 num 变为 0。 返回最少需要多少次操作可以使 num 变成特殊数字。 如…...
Spring MVC 应用分层
1. 类名使⽤⼤驼峰⻛格,但以下情形例外:DO/BO/DTO/VO/AO 2. ⽅法名、参数名、成员变量、局部变量统⼀使⽤⼩驼峰⻛格 3. 包名统⼀使⽤⼩写,点分隔符之间有且仅有⼀个⾃然语义的英语单词. 常⻅命名命名⻛格介绍 ⼤驼峰: 所有单词⾸字⺟…...
QT--进程
一、进程QProcess QProcess 用于启动和控制外部进程,管理其输入输出流。 使用方法 start():启动一个新进程。setStandardInputFile():将文件作为标准输入。将进程的标准输入(stdin)重定向到指定的文件。换句话说&am…...
凸优化笔记-基本概念
原文 文章目录 最小二乘问题 仿射affine hullaffine dimension 凸集锥集超平面和半空间单纯形整半定锥保凸性的操作透视函数 凸函数的条件1阶判定条件2阶判定条件 Epigraph 外图 m i n i m i z e f 0 ( x ) minimize\ \ \ f_0(x) minimize f0(x) s u b j e c t t o f i ( …...
1858. 数组查找及替换
问题描述 给定某整数数组和某一整数 b 。 要求删除数组中可以被 b 整除的所有元素,同时将该数组各元素按从小到大排序。如果数组元素数值在 𝐴‘ 到 Z 的 ASCII 之间,替换为对应字母。 元素个数不超过 100,𝑏 在 1 …...
计算机视觉与面部识别:技术、应用与未来发展
引言 在当今数字化时代,计算机视觉技术迅速发展,成为人工智能领域的一个重要分支。计算机视觉旨在让机器理解和解释视觉信息,模拟人类的视觉系统。它在各行各业中发挥着重要作用,从自动驾驶汽车到智能监控系统,再到医疗…...
用代码管理技能:构建结构化个人技能库的工程实践
1. 项目概述与核心价值最近在整理自己的技能栈时,发现了一个挺有意思的现象:很多开发者,包括我自己在内,对于“技能”的管理往往停留在简历上的一个列表,或者脑子里一个模糊的概念。当需要快速启动一个新项目、评估团队…...
【51单片机】直流电机PWM调速实战:从驱动电路到闭环控制
1. 直流电机驱动基础与硬件选型 第一次玩直流电机时,我直接拿杜邦线把电机接在51单片机的IO口上,结果电机纹丝不动,还差点烧了芯片。这个教训让我明白:驱动电路是电机控制的第一道门槛。常见的直流电机工作电压通常在3-6V…...
别再被Node版本坑了!手把手教你修改uniCloud云函数的Node.js版本(从8升到12/18)
突破Node.js版本限制:uniCloud云函数升级实战指南 1. 为什么你的云函数在云端运行失败? 许多开发者在使用uniCloud时都遇到过这样的困惑:明明本地测试一切正常,部署到云端却突然报错。最常见的错误信息包括right-hand side of ins…...
【独家拆解】微软Copilot Studio、LangChain Agent、UiPath Autopilot底层架构差异:传统自动化团队转型窗口仅剩18个月
更多请点击: https://intelliparadigm.com 第一章:AI Agent与传统自动化的本质区别 核心能力范式迁移 传统自动化(如RPA、Shell脚本、定时任务)依赖预设规则和固定流程,执行确定性动作;而AI Agent具备感知…...
集成学习实战指南:从Bagging到Stacking的模型融合艺术
1. 为什么你需要掌握集成学习? 记得我第一次参加Kaggle比赛时,看到排行榜上那些大神们的模型分数高得离谱,而我的单模型怎么调参都追不上。后来才发现,他们都在用集成学习的魔法。简单来说,集成学习就像组建一个专家团…...
Logo设计全流程指南:从品牌定位到视觉落地的核心逻辑
初创企业团队常面临标志图形难以传递核心业务的现实困境。脱离市场认知的视觉符号会导致后续传播成本成倍增加。本文系统拆解标志构建的标准作业路径,提供可量化验证的参数指标与执行清单。读者可依据本框架完成从抽象概念到商用矢量文件的完整转化。有效规避重复试…...
【SPIE出版】黄冈师范学院主办!第四届大数据、计算智能与应用国际会议(BDCIA 2026)
第四届大数据、计算智能与应用国际会议(BDCIA 2026)将于2026年11月6-8日在中国黄冈召开。本次大会由黄冈师范学院主办,旨在汇聚全球学术界与产业界的专家学者、研究人员及工程技术人员,共同探讨大数据、计算智能及相关应用领域的前…...
别再瞎勾选了!SuperMap iDesktop切MVT矢量瓦片时,‘分离数据与风格’到底怎么选?
MVT矢量瓦片生产中的关键决策:数据与风格分离的深度解析 当你在SuperMap iDesktop中准备生成MVT矢量瓦片时,那个看似简单的"分离数据与风格"复选框背后,隐藏着一系列影响深远的架构决策。这个选择不仅关系到瓦片文件的结构…...
WeChatExporter:打造个人数字记忆档案馆的终极解决方案
WeChatExporter:打造个人数字记忆档案馆的终极解决方案 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 你是否曾想过,那些看似普通的微信聊天记录…...
开发容器Dev Container实战:一键构建跨平台统一开发环境
1. 项目概述:一个为开发者量身定制的“开箱即用”环境 如果你和我一样,经常需要在不同的机器上切换,或者和团队协作时,最头疼的事情之一就是“环境配置”。明明在A电脑上跑得好好的代码,到了B电脑上就各种报错&#x…...
