知识的荒漠

不积跬步无以至千里,不积小流无以成江海;千里之行,始于足下!

用户工具

站点工具


服务器:nas:rsync

需求分析:
1、手机资料使用FloderSync同步至家里J3455 nas(同步后自动删除)
2、J3455 nas 把某些资料同步至J1900 nas(同步后删除)
J3455 IP:192.168.1.4 系统:Ubuntu Server
J1900 IP:192.168.1.6 系统:U-nas
J1900每月某天定时开机,J3455 在此时间发起备份操作

J1900rsync服务器配置

1、进入App管理器安装好Rsync 备份,并在控制中心->存储管理->共享文件夹创建好备份目录
2、进入控制中心→系统工具→Rsync 备份→Rsync服务器配置
勾选启用Rsync服务,端口号保持不变,添加Rsync模块,如图(密码123456)

任务模块名cwz表示路径为/mnt/data1/data1/backup,下面客户端连接的时候用到
点击应用即可
同步过来的文件u-nas无法删除参考:
通常情况下,rsync同步的文件只有所有者读写权限,脚本无法访问。比如你想要web程序读取rsync目录文件,读取完成后删除,那么必须具备该www-data用户具有读写执行文件的权限,可以使用如下方案解决。
1.更改rsync创建文件的所有者
2.更改rsync创建的文件的权限

nano /etc/rsyncd.conf
#更改或者添加相关内容
# 其他配置
uid = www-data
# 其他配置...
incoming chmod = Du=rwx,Dg=rx,Fu=rwx,Fgo=rx
# 其他配置

这样就会强制把同步以后的目录权限改为755,按esc输入q退出即可生效!
注意:
du是目录权限 d开头的是跟目录权限有关,fu是文件所有者,fgo用户组。
最关键的是,客户端同步的时候,需要给服务端可更改文件权限的权限。不然服务端无法更改
修改完成的效果如下:

pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
uid = www-data
incoming chmod = Du=rwx,Dg=rx,Fu=rwx,Fgo=rx
gid = root
maxconnections = 5
port = 873
[cwz]
path = /mnt/data1/data1/backup/
comment = This is a synchronization tasks
ignore errors
read only = no
auth users = cwz
secrets file = /etc/rsync.pass17

如已经同步过去,那么这些同步的文件因为www-data用户没有操作权限所以无法删除,解决办法:
1.控制中心→终端→启动,在打开的终端窗口中输入:

su
#根据提示键入密码,root的密码为yutech
cd /mnt/data1/data1/backup
chown -R www-data:www-data *

在进入网页端,即可删除文件夹及文件
重启服务:

ps -ef|grep rsync|grep -v grep|awk '{print $2}'|xargs kill -9
#也可以用
cat /var/run/rsyncd.pid | xargs kill -9
/usr/bin/rsync --daemon
#检查服务873端口是否启动
netstat -anp|grep 873
#或者
lsof -i:873

J3455rsync客户端配置

ubuntu已默认安装rsync,所以无需安装
1、创建密码文件,密码要与上面服务器端设置的一样,权限一定要为600,否则报错

echo "123456" > /etc/rsyncd.pass
chmod 600 /etc/rsyncd.pass

2、同步测试

cd /var/www/webdav
sudo mkdir cs
sudo touch file{1..10}
sudo rsync -avz /var/www/webdav/cs/ cwz@192.168.1.6::cwz/cs/ --password-file=/etc/rsyncd.pass

把本机的/var/www/webdav/cs/文件目录下所有文件(新建的file1,file2…file10)复制到远程服务器
cwz@192.168.1.6::cwz/cs/意思:用户名@主机ip地址::任务模块名称代表的路径/可以自定义目录名
进一步测试,上传后删除本地文件,只要服务器保留一份即可

sudo rsync -avz --remove-source-files /var/www/webdav/cs/ cwz@192.168.1.6::cwz/cs/ --password-file=/etc/rsyncd.pass

3、实际操作,把j3455主机的webdav文件同步到j1900主机,注意要在backup目录下新建好cwz文件夹,否则会提示出错

sudo rsync -avz --remove-source-files /var/www/webdav/cwz/Recorder/ cwz@192.168.1.6::cwz/cwz/Recorder/ --password-file=/etc/rsyncd.pass

4、cron
4.1创建shell
在/usr/local/etc/monit/scripts/目录下新建sync.sh,synclog.txt这2个文件,目录不存在自行新建,文件权限和用户组保持默认即可(权限0655,用户及用户组root/root)
sync.sh代码

#! /bin/sh
ip=192.168.1.6
#ping $ip -c 2 | grep -q "ttl=" && echo $ip yes || echo $ip no
#result=1,表示在线,进行同步操作输出日志yes,result=0,表示不在线,输出日志no
ping $ip -c 2 | grep -q "ttl=" && result="yes" || result="no"
if [ "$result" == "yes" ];then
rsync -avz --remove-source-files /var/www/webdav/cwz/Recorder/ cwz@192.168.1.6::cwz/cwz/Recorder/ --password-file=/etc/rsyncd.pass
OUTPUT="yes"
else
OUTPUT="no"
fi
echo $OUTPUT >> /usr/local/etc/monit/scripts/synclog.txt

4.2 设置cron
文件位置/var/spool/cron/或执行sudo crontab -e添加定时任务,输入

0 18 * * * /usr/local/etc/monit/scripts/sync.sh #每天晚上18点执行脚本

4.3 重启服务

sudo service cron restart
sudo crontab -l #查看是否已正常加载

4.4 修改monit配置文件

sudo nano /etc/monit/monitrc
#末尾增加的内容:
#J1900的UNAS开机并执行执行rsync同步检测,yes表示开机告警...因为这台电脑定时礼拜天晚上17:50开机
check file rsync with path /usr/local/etc/monit/scripts/synclog.txt
if match "(yes)" then alert
#检查及重启:
sudo monit -t #错误检查
sudo /etc/init.d/monit restart #重启monit服务
服务器/nas/rsync.txt · 最后更改: 2020/09/25 21:02 由 caiweizhi