shell脚本-rsync+inotify自动部署远程实时同步

4 篇文章 0 订阅

试了半天,服务端配置文件用普通用户,客户端推送传输的时候会报错,不管是改备份目录的属主属组还是权限都不行,一个root用户的文件传过来无法更改为root属组属主,只能是普通用户的,不过这个不影响备份过程,只是会在屏幕上显示报错信息而已,用这种备份的应该都是内网传输的吧,root用户也没啥影响,为了安全考虑防止权限溢出的话用普通用户也行。

#/bin/bash
#rsync+inotify自动备份

# 检测yum是否可用
[ $(yum repolist | awk '/repolist/{print$2}' | sed 's/,//') -eq 0 ] && echo '请检查yum源配置。' && exit 2

echo -e "\e[1;31m服务端请按1(备份机器)\n客户端安装请按2(需要备份的机器)\e[0m"
read -p "请输入:"      zbks
case "$zbks" in
1)
#安装服务端
echo -e "\e[1;31m安装rsync中..\e[0m"
yum install rsync -y
if [ $? = 0 ];then
	#修改配置文件
	echo > /etc/rsyncd.conf
	cat >> /etc/rsyncd.conf <<-EOF
	#rsync使用的用户,默认nobody
	uid = root
	gid = root
	#是否限定在该目录下,默认为true,当有软连接时,需要改为fasle
	use chroot = no
	#监听端口
	port 873
	#最大链接数
	max connections = 200
	#指定lock文件用来支持“max connections ”参数使总连接不会超过限制
	lock file = /var/run/rsync.lock
	#pid文件位置
	pid file = /var/run/rsyncd.pid
	#日志文件
	log file =/var/log/rsyncd.log
	#超时时间
	timeout = 300
	#忽略io错误
	ignore errors
	#是否权限设置read为只读权限,因为是客户端推送过来,所以需要写入权限
	read only = false
	#是否允许客户端查看可用模块
	truelist = false
	#允许连接的ip段或个别ip,默认任何人都可以连接
	#hosts allow =
	#不允许连接的IP段或个别ip
	#hosts deny = 0.0.0.0/32
	#指定以空格或逗号分隔用户,他们可以使用这个模块
	auth users = rsync
	#指定用户名和密码文件 格式: 用户名:密码 密码不超过8位
	secrets file = /etc/rsync.password
	#同步模块名称
	[backup] 
	#同步目录绝对路径
	path = /backup
	#遇到以下后缀的文件不进行压缩
	dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
	EOF
	#创建备份目录
	mkdir /backup
	#创建虚拟账号的密码文件
	echo "rsync:a1b2c3" > /etc/rsync.password
	chmod 600 /etc/rsync.password
	#已守护进程启动rsync
	rsync --daemon
	#开机自启
	echo "/usr/bin/rsync --daemon" >>/etc/rc.d/rc.local
	chmod a+x /etc/rc.d/rc.local
	echo -e "\e[1;31m已配置完成并开机自启,备份目录为\backup。\n请使用ps -ef |grep rsync|grep -v grep命令查看进程。\n接下来请在客户端执行此脚本2选项。\e[0m"
else
	echo -e "\e[1;31m安装rsync失败。\e[0m"
	exit 3
fi

;;
2)
#安装客户端
echo -e "\e[1;31m安装rsync中..\e[0m"
yum install rsync -y
if [ $? = 0 ];then
	#与服务端虚拟账号同步密码
	echo "a1b2c3" >/etc/rsync.password
	chmod 600 /etc/rsync.password
	echo -e "\e[1;31m安装inotify-tools中..\e[0m"
	yum install -y inotify-tools
	#修改inotify默认参数
	#inotify队列最大长度,如果值太小,会出现"** Event Queue Overflow **"错误,导致监控文件不准确
	echo "fs.inotify.max_queued_events=1000000" >> /etc/sysctl.conf
	#可监控的目录最大数
	echo "fs.inotify.max_user_watches=1000000" >> /etc/sysctl.conf
	#每个用户创建inotify实例最大值
	echo "fs.inotify.max_user_instances=100000" >> /etc/sysctl.conf
	#使调整inotify内核参数立刻生效
	sysctl -p
	#创建rsync+inotifywait脚本实现单向实时同步
	while [ 1 ]
	do
		echo -e "\e[1;31m请输入需要备份的目录绝对路径(该目录需已存在,格式如:/bak)\e[0m"
		read -p "请输入:"      bak
		echo -e "\e[1;31m请输入备份机器的IP,如:192,168.248.129\e[0m"
		read -p "请输入:"      BIP
		echo -e "\e[1;31m需要备份的目录为$bak,备份机器IP为$BIP,是否正确?\e[0m"
		read -p "是:y  否:输入其它任意键则重新输入	"   yn
		if [ $yn = y ];then
            #创建rsync+inotify脚本实时监控并备份
 			touch /root/inotify_rsync.sh
			cat >> /root/inotify_rsync.sh <<-OK
			#!/bin/bash
			INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete $bak"
			RSYNC_CMD="rsync -azH --delete --password-file=/etc/rsync.password $bak/ rsync@$BIP::backup"
			\$INOTIFY_CMD | while read directory event file
			do
			\$RSYNC_CMD
			done
			OK
			echo "/bin/bash /root/inotify_rsync.sh &" >> /etc/rc.d/rc.local
			chmod a+x /etc/rc.d/rc.local
			/bin/bash /root/inotify_rsync.sh &
			echo -e "\e[1;31m已配置完成并启动,inotify_rsync脚本在/root/下,如有错误请自行修改。\e[0m"
			break
	    fi
done
else
	echo -e "\e[1;31m安装rsync失败。\e[0m"
	exit 3
fi

;;
*)
echo -e "\e[1;31m已退出\e[0m"
	exit
;;
esac

参考帖子:

https://blog.51cto.com/13444271/2113632

https://blog.csdn.net/qq_30429153/article/details/85273633

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值