rsync.org
rsyncd.conf
# /etc/rsyncd.conf # Minimal configuration file for rsync daemon # See rsync(1) and rsyncd.conf(5) man pages for help # This line is required by the /etc/init.d/rsyncd script pid file = /var/run/rsyncd.pid use chroot = yes read only = yes [sql_remote] path = /tmp/sql_remote read only = no write only= yes auth users= root jixiuf secrets file=/etc/rsyncd_pass.conf strict modes=no comment = sql remote uid=0 gid=0 # exclude = /distfiles /packages # Simple example for enabling your own local rsync server #[gentoo-portage] # path = /usr/portage # comment = Gentoo Portage tree # exclude = /distfiles /packages
/etc/rsyncd_pass.conf
jixiuf:jixiuf root:root
rsync -ahqzt /home/jixiuf/Linux-C.pdf jixiuf@127.0.0.1::sql_remote --password-file=/home/jixiuf/passwd -a 存档模式 -h 保存硬连接 -q 制止非错误信息 -z 压缩文件数据在传输 -t 维护修改时间 -delete 删除于多余文件
cat /home/jixiuf/passwd jixiuf
inotify监控目录 inotify-tools
#/bin/sh # REMOTE_IP=192.168.1.202 REMOTE_IP=127.0.0.1 # 以下目录要以 /结尾, # 相对路径 可以包含本地ip作为目录名的一部分以便区分不同服务器 REMOTE_DEST_DIR=tmp/ # 绝对路径 LOCAL_SRC_DIR=/home/jixiuf/lszm2/server/game_server/sql_dest/ # 以上目录要以/结尾 USER_NAME=jixiuf RSYNC_PASSWORD=jixiuf # --password-file=FILE # DST=rsync@$REMOTE_IP:$REMOTE_DEST_DIR DST=$USER_NAME@$REMOTE_IP::sql_remote/$REMOTE_DEST_DIR # rsync /home/jixiuf/notes.org $REMOTE_IP::$REMOTE_DIR # 在对目录进行监控之前,先把已经存在的文件 上传到服务器 FileCnt=`find $LOCAL_SRC_DIR -maxdepth 2 -type f -name "*.sql"|wc -l` if ! [ $FileCnt == 0 ] ; then for i in `find $LOCAL_SRC_DIR -maxdepth 2 -type f -name "*.sql"` do relativePath=${i:${#LOCAL_SRC_DIR}} echo $relativePath cd $LOCAL_SRC_DIR && RSYNC_PASSWORD=$RSYNC_PASSWORD rsync -ahqztR --exclude '*~' --exclude '.#*' $relativePath$File $DST exit_status=$? # 如果成功传到服务器,则删除本地的文件 if [ $exit_status==0 ] ; then echo rm $i rm -f $i fi done fi # rsync # -a 存档模式 # -h 保存硬连接 # -q 制止非错误信息 # -z 压缩文件数据在传输 # -t 维护修改时间 # -delete 删除于多余文件 inotifywait -mrq --exclude '.#.*' -e moved_to,create ${LOCAL_SRC_DIR} | while read Dir Type File # -m 是保持一直监听 # -r 是递归查看目录 # -q 是打印出事件 do # echo $File , $Dir,$Type # ${#变量名}得到字符串长度 # ${变量名:起始}得到子字符串 relativePath=${Dir:${#LOCAL_SRC_DIR}} # -R 使用相对路径, 所以先cd到根目录 cd $LOCAL_SRC_DIR && RSYNC_PASSWORD=$RSYNC_PASSWORD rsync -ahqztR --exclude '*~' --exclude '.#*' $relativePath$File $DST exit_status=$? # 如果成功传到服务器,则删除本地的文件 if [ $exit_status==0 ] ; then echo rm $Dir$File rm -f $Dir$File fi # 为了以防万一有漏网之鱼,每次有新的文件创建时也进行一次全目录扫描 FileCnt=`find $LOCAL_SRC_DIR -maxdepth 2 -type f -name "*.sql"|wc -l` if ! [ $FileCnt == 0 ] ; then for i in `find $LOCAL_SRC_DIR -maxdepth 2 -type f -name "*.sql"` do relativePath=${i:${#LOCAL_SRC_DIR}} echo $relativePath cd $LOCAL_SRC_DIR && RSYNC_PASSWORD=$RSYNC_PASSWORD rsync -ahqztR --exclude '*~' --exclude '.#*' $relativePath$File $DST exit_status=$? # 如果成功传到服务器,则删除本地的文件 if [ $exit_status==0 ] ; then echo rm $i rm -f $i fi done fi # end 为了以防万一有漏网之鱼,每次有新的文件创建时也进行一次全目录扫描 done # # rsync -ahqzt /home/jixiuf/Linux-C.pdf jixiuf@127.0.0.1::sql_remote --password-file=/home/jixiuf/passwd
/usr/local/bin/inotifywait -mrq -e modify,delete,create,attrib ${src}
-m 是保持一直监听
-r 是递归查看目录
-q 是打印出事件