Rsync+Inotify
Rsync這個一般使用系統自帶的服務,服務端需要啟動客戶端無需啟動,服務端設置開機自動啟動
systemctl start rsyncd? ??
systemctl status rsyncd
systemctl restart rsyncd
systemctl enable rsyncd
Inotify單獨下載安裝,在客戶端安裝
服務端配置文件: /etc/rsync.pass? 填入賬號密碼格式root:password
/etc/rsyncd.conf
Vim /etc/rsyncd.conf uid = nobody ?gid = nobody ?use chroot = yes ?max connections = 4 ?pid file = /var/run/rsyncd.pid lockfile = /var/run/rsyncd.lock log file = /var/log/rsyncd.log # exclude = lost+found/ # #? transfer logging = yes # #?? timeout = 900 # #??? ignore nonreadable = yes # #??? # dont compress?? = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 # # [BIM] path = /app/services/tomcat-idp/webapps/idp/themes/default/loginimage write only = yes read only = no hosts allow = * list = yes uid = root gid = root auth users = root secrets file = /etc/rsync.pass |
服務器端登陸有ip限制,如果ip變了,請更改hosts allow
客戶端配置文件/etc/rsync.pass? 填入賬號密碼格式root:password
客戶端同步腳本
#!/bin/bash
src=/app/home/loginUploads/des1=*
dest2=**
deshost=***
deshost2=***
user=root
user2=root
port=873
moudle=BIM
echo "1"
inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w %f' -e modify,delete,create,attrib $src | while read file DATE TIME DIR;
echo "3"
do
echo "1"
rsync -vzrtopg --port $port --progress --delete --password-file=/etc/rsync.pass $src $user@$deshost::$moudle
rsync -vzrtopg --port $port --progress --delete --password-file=/etc/rsync.pass $src $user2@$deshost2::$moudle
echo "${files} was rsynced" >> /var/log/rsync.log 2>&1
done
設置客戶端開機自啟動
nohup sh /app/inotify.sh &填入 /etc/rc.local
chmod 777 /etc/rc.local
Inotify說明
inotify由inotify-tools包提供。在安裝inotify-tools之前,請確保內核版本高于2.6.13,且在/proc/sys/fs/inotify目錄下有以下三項,這表示系統支持inotify監控
inotify-tools源碼包地址:https://cloud.github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
tar xf inotify-tools-3.14.tar.gz
./configure --prefix=/usr/local/inotify-tools-3.14
make && make install
ln -s /usr/local/inotify-tools-3.14 /usr/local/inotify
其中inotifywait命令用于等待文件發生變化,所以可以可以實現監控(watch)的功能,該命令是inotify的核心命令。inotifywatch用于收集文件系統的統計數據,例如發生了多少次inotify事件,某文件被訪問了多少次等等,一般用不上。
以下是inotify相關的內核參數。
(1)./proc/sys/fs/inotify/max_queued_events:調用inotify_init時分配到inotify instance中可排隊的event數的最大值,超出值時的事件被丟棄,但會觸發隊列溢出Q_OVERFLOW事件。
(2)./proc/sys/fs/inotify/max_user_instances:每一個real user可創建的inotify instances數量的上限。
(3)./proc/sys/fs/inotify/max_user_watches:每個inotify實例相關聯的watches的上限,即每個inotify實例可監控的最大目錄、文件數量。如果監控的文件數目巨大,需要根據情況適當增加此值
echo 30000000 > /proc/sys/fs/inotify/max_user_watches
inotifywait命令的選項:
-m:表示始終監控,否則應該是監控到了一次就退出監控了
-r:遞歸監控,監控目錄中的任何文件,包括子目錄。遞歸監控可能會超出max_user_watches的值,需要適當調整該值
@<file>:如果是對目錄進行遞歸監控,則該選項用于排除遞歸目錄中不被監控的文件。file是相對路徑還是絕對路徑由監控目錄是相對還是絕對來決定
-q:--quiet的意思,靜默監控,這樣就不會輸出一些無關的信息
-e:指定監控的事件。一般監控的就delete、create、attrib、modify、close_write
--exclude <pattern> :通過模式匹配來指定不被監控的文件,區分大小寫
--excludei <pattern>:通過模式匹配來指定不被監控的文件,不區分大小寫
--timefmt:監控到事件觸發后,輸出的時間格式,可指定可不指定該選項,一般設置為[--timefmt '%Y/%m/%d %H:%M:%S']
--format:用戶自定義的輸出格式,如[--format '%w%f %e%T']
? %w:產生事件的監控路徑,不一定就是發生事件的具體文件,例如遞歸監控一個目錄,該目錄下的某文件產生事件,將輸出該目錄而非其內具體的文件
? %f:如果監控的是一個目錄,則輸出產生事件的具體文件名。其他所有情況都輸出空字符串
? %e:產生的事件名稱
? %T:以"--timefmt"定義的時間格式輸出當前時間,要求同時定義"--timefmt"
inotifywait -e可監控的事件:
access:文件被訪問
modify:文件被寫入
attrib:元數據被修改。包括權限、時間戳、擴展屬性等等
close_write:打開的文件被關閉,是為了寫文件而打開文件,之后被關閉的事件
close_nowrite:read only模式下文件被關閉,即只能是為了讀取而打開文件,讀取結束后關閉文件的事件
close:是close_write和close_nowrite的結合,無論是何種方式打開文件,只要關閉都屬于該事件
open:文件被打開
moved_to:向監控目錄下移入了文件或目錄,也可以是監控目錄內部的移動
moved_from:將監控目錄下文件或目錄移動到其他地方,也可以是在監控目錄內部的移動
move:是moved_to和moved_from的結合
moved_self:被監控的文件或目錄發生了移動,移動結束后將不再監控此文件或目錄
create:在被監控的目錄中創建了文件或目錄
delete:刪除了被監控目錄中的某文件或目錄
delete_self:被監控的文件或目錄被刪除,刪除之后不再監控此文件或目錄
umount:掛載在被監控目錄上的文件系統被umount,umount后不再監控此目錄
isdir :監控目錄相關操作