利用rsync+inotify 实现录音文件实时同步

本文介绍如何使用rsync结合inotify在Linux环境下实现文件的实时同步。主要内容包括rsync服务的配置与密码文件认证传输、inotify服务的安装配置以及通过SSH免密码认证提高自动化程度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CTI-media模块测试环境下,利用rsync+inotify 实现录音文件实时同步设置


系统环境:
          10.10.8.232  (发布文件服务器)  源目录:/home/admin/LISTEN/media/
 10.10.10.132 (发布文件服务器)  源目录:/home/admin/LISTEN/media/
 10.10.10.102 (发布文件服务器)  源目录:/home/admin/LISTEN/media/
                  
          10.10.14.49   (同步镜像文件服务器) 目标目录:/home/admin/LISTEN/media/
 
实现目标:8.232目录/home/admin/LISTEN/media/ 通过Rysnc实时同步到14.49 /home/admin/LISTEN/media/目录
 


一、配置Rysnc服务 ,实现文件密码文件认证传输。
首先在10.10.14.49上搭建rsync服务,设置同步的目录,设置为rsync服务端
1、 在10.10.14.49上下载、安装 rsync
yum -y install rsync
2、 查看rsync安装完成的版本
rsync –version
说明 centos6.5默认yum源的安装完成版本是3.0.6
 
Centos7 默认yum源安装完成的版本是3.0.9
3、配置rsync server服务:
#vim /etc/rsyncd.conf
uid = root                             //运行RSYNC守护进程的用户
gid = root                             //运行RSYNC守护进程的组
use chroot = no                  //不使用chroot 如果需要启用非chroot账号,需将改yes
max connections=0          // 最大连接数无限制
log file=/var/log/rsyncd.log               //日志记录文件的存放位置
pid file=/var/run/rsyncd.pid              //锁文件的存放位置
lock file=/var/run/rsyncd.lock           //pid文件的存放位置 
[voicebakA1]                        //这里是认证的模块名,在client端需要指定
path = /voice/
comment = 10.10.10.102,10.10.8.232,10.10.10.132;
read only = no 
list = on
auth users = root                        //如果需要启动其他账号的,需改chroot处。            
secrets file = /etc/49.pas
 
 
4、设置密码文件secrets file ,编辑/etc/49.pas
#vim  /etc/49.pas  
root:123456   //用户名和密码,用”:” 隔开


并且设置600文件属性,或者至少600权限:
#chmod 600 /etc/49.pas
 


5、启动Rsync服务:
方法一:/usr/local/rsync/bin/rsync --port=873 --address=10.10.14.49 –daemon
方法二: 安装xinetd 使用yum 方式yum –y install xinetd 
service xinetd start
加入xinetd,将rsync服务端放入xinetd族中,进行配置和启动控制。
       编辑/etc/services,检查rsync的服务端口,默认是TCP和UDP的873
       编加/etc/rsync:
    service rsync
    {
            disable = no #开启服务
            socket_type     = stream
            wait            = no
            user            = root
            server          = /usr/local/bin/rsync 
            server_args     = --daemon --config /etc/rsyncd.conf 
            log_on_failure  += USERID
    }




二、其次在10.10.8.232分发服务器上测试同步:
1、添加密码文件认证:
#vim /etc/232.pas
123456   //对应10.10.14.49 密码即可
并且设置600文件属性:
#chmod 600 /etc/232.pas
 
2、手动同步测试
/usr/bin/rsync  –avH  –delete —progress  --password-file=/etc/232.pas
/home/admin/LISTEN/media/ root@10.10.14.49:: voicebakA1
同步经过
 
3、 rsync常见错误处理
(1) @ERROR: auth failed on module test
rsync error: error starting client-server protocol (code 5) at main.c(1503) [receiver=3.0.6]
检查服务器A存储密码文件和服务器B密码文件。
服务器A密码文件: /etc/rsyncd/rsyncd.secrets 格式为:username:*******
服务器B密码文件: /etc/rsyncd/rsyncd.secrets 格式为:password
(2) Rsync端口占用
rsyncd version 3.0.6 starting, listening on port 873
bind() failed: Address already in use (address-family 2)
socket(10,1,6) failed: Address family not supported by protocol
unable to bind any inbound sockets on port 873
rsync error: error in socket IO (code 10) at socket.c(541) [receiver=3.0.6]
检查端口是否被占用 lsof -i:873
(3) Rsync服务未正常启动
rsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(244) ]
rsync error: received SIGUSR1 (code 19) at main.c(1182) 
说明:导致此问题多半是服务端服务没有被正常启动,到服务器上去查查服务是否有启动,然后查看下 /var/run/rsync.pid 文件是否存在,直接删除rsync进程文件
(4) @ERROR: Unknown module ‘voicebakA1' 
rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
服务器不存在指定模块。提供正确的模块名或在服务器端修改成你要的模块以解决问题,修改服务端 /etc/rsyncd.conf中 查询下[voicebakA1]模块命名是否正确
(5) 在client上遇到问题: 
/usr/bin/rsync  –avH  –delete —progress  --password-file=/etc/232.pas
/home/admin/LISTEN/media/ root@10.10.14.49:: voicebakA1 
rsync: could not open password file "/etc/rsync.pas": No such file or directory (2) 
Password: 
@ERROR: auth failed on module backup 
rsync error: error starting client-server protocol (code 5) at main.c(1506) [Receiver=3.0.7] 
遇到这个问题:client端没有设置/etc/rsync.pas这个文件,而在使用rsync命令的时候,加了这个参数--在client端创建相对应的pas文件,并附600权限
password-file=/etc/rsync.pas
 
三、安装配置inotify 服务
在10.10.8.232 上搭建inotify 服务
1、安装顺序
libinotifytools-devel-3.14-4.1.x86_64 ----- libinotifytools0-3.14-6.1.x86_64 ------ inotify-tools-3.14-4.1.x86_64
2、创建rtcopy.sh脚本并后台运行
#!/bin/bash
LOCALMEDIAPATH='/home/admin/LISTEN/media'
REMOTEPATH='root@10.10.14.49::voicebakA1'


/usr/bin/inotifywait -mr -s --exclude '.wav' --timefmt '%d/%m/%y %H:%M' --format '%T %w %f' \
-e close_write $LOCALMEDIAPATH | while read date time dir file;
do


       FILECHANGE=${dir}${file}
       # convert absolute path to relative
       FILECHANGEREL=`echo "$FILECHANGE" | sed 's_'$LOCALMEDIAPATH'/__'`
       FILEFULLPATH="$LOCALMEDIAPATH/./$FILECHANGEREL"


       /usr/bin/rsync -avH -e "ssh -p 22" --progress --relative --password-file=/etc/232.pas $FILEFULLPATH  $REMOTEPATH &&\
       echo "At ${time} on ${date}, file $FILECHANGEREL was backed up via rsync" >> /var/log/rsyncA1.log


done


3、赋予脚本可执行权限
#chmod +x inotify_rsync.sh
运行
#./ inotify_rsync.sh &
4、 测试 在8.232的 /home/admin/LISTEN/media/创建一个abcd .mp3文件
(1)touch abc.mp3 /home/admin/LISTEN/media/ 
 
(2)在14.49节点下 前往/voice/下 查看abcd.mp3文件是否存在
      
如果存在,即表示同步成功
四、rsync免密码远程ssh认证登录,三个media节点中,8.232与10.102已经认证免密码ssh认证,而10.132节点未进行认证,故每次后台运行rtcopy.sh脚本时,都会出现root@10.10.14.49 password:
需要每次输入密码才能够自动同步文件。需要在10.132与14.49上产生ssh密钥与公钥
(1) 使用ssh-keygen生成密匙
$ ssh-keygen
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
提示:当提示输入密码时,只需输入两次回车键,不指配密码字符。
(2) 使用ssh-copy-id将公匙拷贝至远程主机
执行ssh-copy-id,将通过ssh-keygen生成的公匙拷贝至远程主机。
ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.200.10
提示:执行以上操作时,将会提示输入远程主机帐户和密码,然后就会自动将公匙拷贝至远程目录。
(3) 无需密码通过ssh来执行rsync
/usr/bin/rsync  –avH  –delete —progress  --password-file=/etc/232.pas
/home/admin/LISTEN/media/ root@10.10.14.49:: voicebakA1
或者执行rtcopy.sh 后台再次运行,在/home/admin/LISTEN/media/ 创建文件,验证是否需要密码登录
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值