自然申请的又拍云联盟优惠(15GB存储/月,10GB流量/月)不到4个月已经把1年的量用完了,现在开始更换CDN附件加速服务,现在需要把数据迁移到全新的存储加速平台,平台提供了不限量的存储服务和2TB/月的CDN流量。
现在遇到问题,附件如何在本地+云端同时拥有,并保持两端文件的同步,平台使用ftp进行文件管理。双端可控的情况下,syncthing会是最佳的选择。通过咨询linux大佬得到的方案是使用inotify对本机文件系统进行状态监控,发生modify,delete,create,attrib,move等变化时,触发sync同步文件。
inotify介绍
Inotify一种强大的、细粒度的、异步文件系统监控机制,它满足各种各样的文件监控需要,可以监控文件系统的访问属性、读写属性、权限属性、删除创建、移动等操作,也就是可以监控文件发生的一切变化。
参考文章:https://www.ibm.com/developerworks/cn/linux/l-ubuntu-inotify/index.html
linux开发者已经基于c语言开发了工具包inotify-tools供我们使用,自然在这里使用rclone挂载ftp进行文件的同步。
inotify-tools软件包安全
2.1编译安装
wget https://github.com/inotify-tools/inotify-tools/releases/download/3.20.2.2/inotify-tools-3.20.2.2.tar.gz tar -zxvf inotify-tools-3.20.2.2.tar.gz cd inotify-tools-.20.2.2 ./configure --prefix=/usr/local/inotify make && make install
2.2软件包安装
对于自然这种懒人而言,能软件包安装的何必编译呢?
#redhat/centos平台 yum install inotify-tools
#debian/ubuntu平台 apt-get install inotify-tools
sync同步脚本代码
3.1sync同步脚本代码
cat >/root/inotify_sync.sh <<EOF #!/bin/sh ## ------------------------------------------------- ## @监控目录状态,有变化后触发rsync同步 ## ------------------------------------------------- srcdir="/www/www.wanvi.net/wp-content/uploads/" /usr/bin/inotifywait -mrq --timefmt '%d/%m/%y-%H:%M' --format '%T%w%f' -e modify,delete,create,attrib,move ${srcdir} \ |while read file do /usr/bin/rclone sync /www/www.wanvi.net/wp-content/uploads/ ufile:/wp-content/uploads/ -v done EOF
srcdir为需要监控的路径;
rclone 为文件同步的工具,如果需要其他工具也可以sync、rsync、scp等等都可以;
3.2设置开机启动sync同步脚本
cat >> /etc/systemd/system/inotify_sync.service <<EOF [Unit] Description=CTList After=network.target [Service] Type=simple ExecStart=/root/inotify_sync.sh Restart=on-failure [Install] WantedBy=multi-user.target EOF
3.3常用管理命令
启动同步服务 systemctl start inotify_sync.service
停止同步服务 systemctl stop inotify_sync.service
查看同步服务状态 systemctl status inotify_sync.service
开启开机自启动 systemctl enable inotify_sync.service
关闭开机自启动 systemctl disable inotify_sync.service
总结
利用inotify这个linux内核功能,完成了文件系统状态的监控,可以设置相应的脚本,在文件发生变化时触发一定的动作。自然这里用来同步ftp远程文件可谓是大材小用了,如果你是linux爱好者,你可以利用它的特性编写各种个性化的小工具。