首页 > 其他分享 >039rsync和inotify实时文件同步

039rsync和inotify实时文件同步

时间:2024-04-09 09:44:46浏览次数:22  
标签:rsync monitor data 实时 source 039rsync local dir inotify

安装

  • 注意把ip换一下
#主备机器都安装rsync和inotify-tools
sudo apt-get -y install rsync inotify-tools

#使用nginx配置文件测试:
/tmp# cd /tmp && cp -rf  /usr/local/nginx/conf/  nginx_conf

#初始同步
rsync -avz --delete /tmp/nginx_conf root@10.80.7.14:/tmp
mkdir -p /data/logs/rsync/ && touch /data/logs/rsync/sync.log mkdir /opt/script/ && vim /opt/script/monitor.sh && chmod a+x *.sh
#!/bin/bash

# 定义源目录和目标目录的映射关系
declare -A paths=(
  ["/usr/local/nginx/conf"]="root@10.80.7.14:/usr/local/nginx/conf"
  ["/data/wwwroot"]="root@10.80.7.14:/data/wwwroot"  
  ["/data/service"]="root@10.80.7.14:/data/service"
)

log_file="/data/logs/rsync/sync.log"  # 日志文件路径

# 同步函数,将指定的源目录同步到目标目录
sync_files() {
  local source_dir="$1"
  local destination_dir="$2"

  echo "$(date '+%Y-%m-%d %H:%M:%S') - Syncing files in $source_dir..." >> "$log_file"
  rsync -avz --delete "$source_dir/" "$destination_dir" >> "$log_file" 2>&1
  echo "$(date '+%Y-%m-%d %H:%M:%S') - Sync complete for $source_dir." >> "$log_file"
}

# 并发处理函数,用于监控和同步指定的目录
process_dir() {
  local source_dir="$1"
  # 用于获取关联数组 paths 中指定键 $source_dir 对应的值(value)
  local destination_dir="${paths[$source_dir]}"

  # 监控并同步指定的目录
  while inotifywait -r -e modify,create,delete,move "$source_dir"; do
    sync_files "$source_dir" "$destination_dir"
  done
}

# 同时监控和同步多个目录
for source_dir in "${!paths[@]}"; do
  process_dir "$source_dir" &  # 在后台运行处理函数
done

wait  # 等待所有后台进程完成

使用systemd使脚本一直运行

# 在源机器上创建一个systemd服务单元文件以管理monitor.sh脚本的运行。在终端中使用以下命令创建一个新的服务单元文件(例如monitor.service): #在编辑器中输入以下内容: vim /etc/systemd/system/monitor.service
[Unit]
Description=File monitoring and synchronization service

[Service]
ExecStart=/opt/script/monitor.sh

[Install]
WantedBy=multi-user.target
  • 启动
#启用和启动服务
sudo systemctl enable monitor
sudo systemctl start monitor

#检查服务的状态
sudo systemctl status monitor

#停止服务
sudo systemctl stop monitor

 

标签:rsync,monitor,data,实时,source,039rsync,local,dir,inotify
From: https://www.cnblogs.com/itcomputer/p/18123198

相关文章

  • 【51单片机入门记录】RTC(实时时钟)-DS1302应用
    目录一、DS1302相关写函数(1)Write_Ds1302(2)Write_Ds1302_Byte二、DS130相关数据操作流程及相关代码(1)DS1302初始化数据操作流程及相关代码(shijian[i]/10<<4)|(shijian[i]%10)的作用:将十进制转换为BCD码。代码呈现(2)DS1302获取数据操作流程及相关代码代码呈现三、应用举例-......
  • csdn博客自定义模块:显示实时天气、日历、随机语录代码
    目录1.样式说明2.效果展示3.代码下载1.样式说明vip会员或者博客专家可以自定义模块代码,比如我博客的样式,有这几部分组成:灯笼祝福(我这里是龙年快乐,可以自定义更改任何字)、滚动欢迎语(我这里是欢迎访问我的博客,可以自定义更改任何欢迎语)github链接、知乎链接、邮箱发......
  • 身份证真伪查询接口、身份证实名认证一行python代码即可实现,实时数据
    互联网多元化的发展使得互联网金融、O2O、交友等新型商业形式不断的兴起与创新,也正因如此,互联网企业对于实名认证接口的需求也在不断的增多,对数据形式,可靠性也有了更高的需求,对此衍生了身份证实名认证接口业务,那么如何通过一行python代码来实现实名认证呢?以翔云身份证实......
  • 以下哪个不能反映仪器的实时状态? 运行,维修,待机,超时
    在给出的选项中,“运行”、“待机”和“超时”通常是可以用来反映仪器的实时状态的,分别表示:运行:仪器正在执行其预期功能,处于工作状态。待机:仪器已准备就绪,可以随时启动工作,但目前尚未进行实际操作,处于等待指令或条件的状态。超时:仪器在某一操作或任务上超过了预设的时间限制,可......
  • 前端全栈echarts实时制作。node.js写后端api接口。
    首先先介绍一下我这个实时可视化的流程:先写后端→写html网页结构→echarts画图→获取api接口数据→做实时可视化。总体来说就是要做一个实时可视化。不说怎么多了我直接开始操作,这次可能不会一下全部写完,但后面会接着继续完善此博客呢。一:node.js写api接口非常的简单,直接一......
  • AI绘画:使用ComfyUI结合LCM进行实时绘图:开启AI艺术创作新篇章
    在数字艺术的世界里,ComfyUI和LCM(LatentContextualModulation)的结合为艺术家和设计师们提供了一个强大的实时绘图工具。LCM是一种先进的技术,它能够实时地将用户的输入和反馈融入到图像生成过程中,从而创造出动态变化的艺术作品。本文将作为一篇教程,引导你如何使用ComfyUI结合LC......
  • 6.8物联网RK3399项目开发实录-驱动开发之RTC实时时钟的使用(wulianjishu666)
    90款行业常用传感器单片机程序及资料【stm32,stc89c52,arduino适用】链接:https://pan.baidu.com/s/1M3u8lcznKuXfN8NRoLYtTA?pwd=c53f ========================================================RTC使用简介AIO-3399J开发板上有一个集成于RK808上的RTC(RealTime......
  • 操作系统综合题之“采用实时调度,可调度的限制条件和可调度的最大X值是是多少ms的CPU时
    一、问题:单处理器情况下,m个周期性实时进程,若进程i处理时间为Ci,周期时间为Pi<(1≤i ≤m)1.要使系统可调度的限制条件什么?2.设置一个实时系统使用了4个周期事件,其周期分别为50ms,100ms,200ms,200ms。假设这4个周期时间分别需要25ms,20ms,10ms和xms的CPU时间。保持系统可调度的最......
  • 操作系统综合题之“采用实时调度,6个实时进程是否能保证都在截止时间完成吗?”
    一、问题:为了实现实时调度,系统需要为调度程序提供那些信息?(至少写出4个)在单处理机情况下,如果有6个实时进程,周期时间都是30ms,系统为每个进程分配6ms的处理时间,请问系统能否保证每个实时进程都能在截止时间内完成吗?为什么? 二、参考答案答:1.系统需要提供的信息:就绪时间,开始截止时......
  • C语言—用EaxyX绘制实时钟表
     代码效果如图#undefUNICODE#undef_UNICODE#include<graphics.h>#include<conio.h>#include<math.h>#definewidth640#definehigh480#definePI3.14159intmain(){ initgraph(width,high); intcenter_x,center_y; center_x=width/2;......