linux 关闭rsync服务器,linux下配置rsync服务器和实时同步
发布日期:2021-06-24 11:22:24 浏览次数:3 分类:技术文章

本文共 6983 字,大约阅读时间需要 23 分钟。

安装:rpm –ivh

rsync-XXXXXX.RPM也可以用YUM

启动rsync必须要装xinetd,它是靠它启动的,端口是873

设定:

/etc/xinetd.d/rsync:即#vi

/etc/xinetd.d/rsync

#default: off

#de.ion:The rsync server is a good addition to am ftp server,as it

#    allows crc checksumming etc.

service rsync

{

disable = no把它改为no

socket_type   = stream

wait      = no

user      = root

server     = /usr/bin/rsync

server_args   = --daemon

log_on_failure += USERID

}

配置文件解释:

uid=nobody

gid=nobody

运行rsync用户和组

max connections=4

最大连接数

use chroot=no

log file=/var/log/rsyncd.log

pid file=/var/run/rsyncd.pid

lock file=/var/run/rsyncd.lock

必须要定义这个文件,里面定义第一个模块的用户名和密码,格式:test:password,权限必须是600

[test]模块名

path=/test  这个目录必须nobody可读写

模块所定义的路径

comment = test

备注

ignore errors

read only = yes

如果出现模块只能读的错误,就把这里改成NO

list = no

secrets file = /etc/swd/www.pass

定义用户和密码,权限必须是600

我的同步脚本:

#!/bin/bash

#set -x

rsync -uqpzrt    --delete  --password-file=/etc/swd/rsync.secrets    test@192.168.2.11::test /test

#在客户端用rsync同步的话,首先要在服务端定义此模块的用户名和密码,然后在客户端定义此文件,此文件只要定义密码就行,必须和服务端的密码一致。

if [ $? -eq 0 ];then

echo "$(date +"%Y-%m-%d %H:%M:%S") picture rsync success" >> /var/log/rsync.log

else

echo "$(date +"%Y-%m-%d %H:%M:%S") picture rsync error" >> /var/log/rsync.log

fi

chown -R daemon:daemon /test

用rsync同步其实跟scp差不多,可以从服务端复制到客户端,也可以从客户端复制到服务端

运行参数解释:

-u更新数据

-h , --help显示rsync求助资讯--version顯示rsync版本-v , --verbose复杂的输出信息-q , --quiet安静模式,几乎没有讯息产生, 常用在以cron执行rsync

-I, --ignore-times通常rsync为了加快速度会忽略同样档案大小且同样,同样存取时间点的档案可以通过此参数开关此快速检查.

--size-only rsync只检查档案大小是否改变,不管时间存取点是否改变通常用在mirror,且对方时间不太正确时-c, --checksum在传送之前透过128bit的md4检查码来检查所有要传送的档案(会托满速度);

-a, --archive archive mode权限保存模式,相当于-rlptgoD参数.很快速的保存几乎所有的权限设定,除了硬式连接(透过-H设定).

-r, --recursive复制所有下面的资料(透过)

-R, --relative使用相对路径如: rsync

foo/bar/foo.c remote:/tmp/在远端产生/tmp/foo.c档案rsync -R foo/bar/foo.c remote:/tmp/在远端产生/tmp/foo/bar/foo.c档案-R, --relative不使用相对路径-b, --backup目的地端先前已经存在的档案在传输或删除前会被备份--backup-dir=DIR设定备份的资料夹--suffix=SUFFIX指定备份的档案名称字尾形式(预设为~)

-K, --keep-dirlinks接收方将连接到资料夹的档案视为资料夹处理-l, --links复制所有的连接-H, --hard-links保留硬式连结-p, --perms保留档案权限-o, --owner保留档案所有者(root .ly)

-g, --group保留档案群组-D, --devices保留device资讯(root .ly)

-t, --times保留时间点-n, --dry-run不实际执行传送,只显示将会有的传输动作-S, --sparse尝试去处理稀疏的档案,让这些档案在目的端占去较少的磁碟空间-W, --whole-file复制所有的档案,不额外作检查--no-whole-file关闭--whole-file参数-x, --one-file-system不要跨越档案系统分界(只在一个档案系统处理)

-B, --block-size=SIZE强制透过rsync程式去比对修复block-sizeforce

-e --rsh=COMMAND定义所试用的remote

shell

--rsync-path=PATH定义rsync在远端机器存放资料的路径--existing只对比更新目的端已经存在的档案--ignore-existing忽略目的断已经存在的档案(也就是不更新)

--delete删除传送断已经不存在,而目的端存在的档案--delete-excluded除了把传送端已经不存在,而目的端存在的档案删除之外,也删除--exclude参数所包含的档案--delete-after rsync预设会在档案传送前进行相关删除动作确保接收端有足够的档案空间,单可以透过--delete-after让删除动作在档案传送后在进行删除--ignore-errors忽略任何错误即使是I/O

error也进行--delete删除动作--max-delete=NUM定义rsync不要删除超过NUM个档案--partial rsync若遇到传输过程中断时,会把那些已经传输的档案删除.在某种状况下保留那些部分传送的档案是令人高兴的;你可以透过--partial参数达到这个目的.

--partial-dir=DIR在--partial参数启动时,你还是可以定义rsync把那些部分传送的档案写入定义的资料夹,而非直接写入目的端,需要注意的是,此资料夹不应该被其他试用者可以写入.(如:/tmp)

--force当目的端资料夹被传送端非资料夹名称覆盖时,强制rsync删除资料夹,即使该资料夹不是空的.

--numeric-ids不将传送端档案的uid及gid值,与目的端的使用者/群组进行配对,若传送端并没有uid及gid的对应名称(如:原帐号群组被删除的遗留档案),或目的端没有相对应的帐号/群组,保留数字型式的uid/gid

--timeout=TIMEOUT设定I/O超时的时间(秒).超过这个秒数而没有资料传送, rsync将会结束.预设为0,也就是没有定义超时时间-T, --temp-dir=DIR定义rsync在接收端产生暂时性的复制档案时使用资料夹暂存, 预设时直接在接收端资料夹直接产生暂存档案--compare-dest=DIR定义rsync在目的端建立资料夹来比对传送过来的档案.

--link-dest=DIR与--compare-dest相同,但同时会针对无法改变的档案建立硬式连结.

-z, --compress压缩模式,当资料在传送到目的端进行档案压缩.

-P -P参数和--partial

--progress相同.只是为了把参数简单化.

-C, --cvs-exclude排除那些通常不希望传送的档案,定义的方式与CVS传送相同:

RCS SCCS CVS CVS.adm RCSLOG cvslog.* tags TAGS .make.state

.nse_depinfo *~ #* .#* ,* _$* *$ *.old *.bak *.BAK *.orig *.rej

.del-* *.a *.olb *.o *.obj *.so *.exe *.Z *.elc *.ln core .svn/符合以上条件的都会被忽略不传送.

--exclude=PATTER符合PATTERN(规则表示式)样式的档案不仅行传送--exclude-from=FILE和--exclude参数相同,不过是把不进行传送的档案事先写入某一档案.执行时,透过此参数让rsync读取.

(; #开头的行列或者空白会被rsync忽略)

--include=PATTERN定义rsync不要排除符合pattern样式的档案--include-from=FILE和--include参数相同,只不过把要包含的档案写到某一档案.

--files-from=FILE把要传送的档案名称都精确的写入某一档案,让rsync读取.如: rsync -a

--files-from=/tmp/foo /usr remote:/backup

-0 --from0定义档案所要读取的档案时null字元结尾.

--version现四版本信息.

--daemon定义rsync以daemon型态执行--no-detach当以daemon形态执行时,不要进行分裂且变成背景程序.

--address=ADDRESS定义所要连接(bind)的ip位置或者是host名称(daemon限定)

--config=FILE定义所要读取的设定档rsyncd.conf位置(daemon限定)预设值为/usr/local/etc/rsyncd.conf

--port=PORT定义rsyncd(daemon)要旨行的port(预设为tcp 873)

--blocking-io使用blocking I/O连结远端的shell,如rsh, remsh

--no-blocking-io使用non-blocking连结远端的shell,如ssh(预设值)

--stats显示档案传送时的资讯状态--progress显示传送的进度.(给档案传送时,怕无聊的人用的..)

--log-format=FORMAT定义log的格式(在rsyncd.conf设定)

--password-file=FILE从档案读取与远端rsync伺服务连结的密码--bwlimit=KBPS定义传输频宽的大小(KBytes/秒)

--write-batch=FILE把记录资料写入一个档案(给其他相同环境且相同需求的机器试用)

--read-batch=FILE透过读取记录档案来进行传输.(档案由--write-batch参数产生)

--checksum-seed=NUM定义档案checksum-seed的大小(byte)

-4 --ipv4使用IPv4协定-6 --ipv6使用IPv6协定

--password-file=/etc/swd/rsync.secrets指定同步用户的用户名密码,这个文件的权限必须要是600

p_w_picpaths@192.168.88.11::p_w_picpaths用户名@rsync服务器::模块名

FAQ

Q:出现如此错误:rsync: failed to set times . "/." (in test): Operation not permitted (1)

rsync: failed to set times . "/." (in test): Operation not permitted (1)

rsync error: some files could not be transferred (code 23) at main.c(892) [sender=2.6.8]

A:那是因为rsync服务端的要 同步的目录的权限设置不对,应该要设置你启动rsync用户的权限

实时同步

引用:Inotify 是文件系统事件监控机制,计划包含在即将发布的 Linux 内核中作为 dnotify

的有效替代。dnotify

是较早内核支持的文件监控机制。Inotify一种强大的、细粒度的、异步的机制,它满足各种各样的文件监控需要,不仅限于安全和性能。下面让我们一起学

习如何安装 inotify 和如何构建一个示例用户空间应用程序来响应文件系统事件。

文件系统事件监控对于从文件管理器到安全工具的各种程序都是必要的,但是 dnotify(早期内核中的标准)存在一些局限性,这使我们期待出现一种更加完善的机制。抱着这种期待,我们发现了 inotify,一种更加现代化的文件系统事件监控替代品。

为什么使用 inotify?

使用 inotify 取代 dnotify 的原因有很多。第一个原因是,dnotify 需要您为每个打算监控是否发生改变的目录打开一个文件描述符。当同时监控多个目录时,这会消耗大量的资源,因为有可能达到每个进程的文件描述符限制。

除此之外,文件描述符会锁定目录,不允许卸载(unmount)支持的设备,这在存在可移动介质的环境中会引发问题。在使用 inotify 时,如果正在监控被卸载的文件系统上的文件,那么监控会被自动移除并且您会接收到一个卸载事件。

dnotify 不如 inotify 的第二个原因是 dnotify 有点复杂。注意,使用 dnotify 基础设施的简单文件系统监控粒度只停留于目录级别。为了使用 dnotify 进行更细粒度的监控,应用程序编程人员必须为每个受监控的目录保留一个 stat 结构的缓存。该用户空间的 stat 结构缓存需要用来明确确定当接收到通知信号时目录发生了什么变化。当获得通知信号时,生成 stat 结构列表并与最新的状态相比较。显而易见,这种技术是不理想的。

inotify 的另一个优点是它使用文件描述符作为基本接口,使应用程序开发者使用 select 和 poll 来监控设备。这允许有效的多路 I/O 和与 Glib 的 mainloop 的集成。相反,dnotify 所使用的信号常常使程序员头疼并且感觉不太优雅。

inotify 通过提供一个更优雅的 API 解决了这些问题,该 API 使用最少的文件描述符,并确保更细粒度的监控。与

inotify 的通信是通过设备节点提供的。基于以上原因,对于监控 Linux 2.6 平台上的文件,inotify 是您最明智的选择。

引用链接:

http://www-128.ibm.com/developerworks/cn/linux/l-inotify.html#N10081

需求:对需要同步的目录进行监控,一有变化就同步

安装步骤:

1.首先确认你的内核支持inotify,如果不支持对内核打补丁,一般情况内核在 2.6.3以上的都支持的。你可以确认下运行

[root@test ~]# ls -l /proc/sys/fs/inotify/

total 0

-rw-r--r-- 1 root root 0 Feb 17 00:02 max_queued_events

-rw-r--r-- 1 root root 0 Feb 17 00:02 max_user_instances

-rw-r--r-- 1 root root 0 Feb 17 00:02 max_user_watches

如果没有的话,就要编译内核选上inotify

安装

./configure --prefix=PATH&&make&&make install

自己同步的脚本:

/opt/inotify/bin/inotifywait -mrq -e create,move,delete,modify /test/www | while read file;do

rsync -uahqzt --delete --password-file=/etc/swd/rsync.secrets /test/www/ www@192.168.2.3::www

done

inotifywait的参数解释

-m 是保持一直监听

-r 是递归查看目录

-q 是打印出事件~

-e create,move,delete,modify

监听 创建 移动 删除 写入 事件

[root@test swd]# ./wwwrsync.sh &

转载地址:https://blog.csdn.net/weixin_32467749/article/details/116701674 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:linux初始化TCP服务失败,深入Linux系统追踪TCP初始化
下一篇:linux英文包安装教程视频,Linux源码包安装过程讲解

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月19日 02时08分52秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章