您好,登錄后才能下訂單哦!
Inotifywait中怎么利用scp實現內網多服務器文件實時同步,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
最初的想法是想用rsync
但是覺得麻煩于是研究了下inotifywait也能達到很好的效果
需要注意的是cp到遠程機的文件權限會變成root,因為是使用root登錄ssh傳送的,如果需要在cp完成時再ssh一次chown即可
#!/bin/sh CODE_PATH=/data/www/web/ CODE_IP_ONE=192.168.0.222 CODE_IP_TWO=192.168.0.233 CODE_IP_THREE=192.168.0.255 EXCLUDE_LIST="(runtime|console|.*\.txt|.*\.log|.*\.swp)" /usr/local/bin/inotifywait -mrq --exclude ${EXCLUDE_LIST} --timefmt "%Y%m%d%H%M%S" --format "%T %w %f" -e modify -e create ${CODE_PATH} | while read date dir file do CodeFileName=${dir}${file} /usr/bin/ssh root@$CODE_IP_ONE "[ -d ${dir} ] && echo folderOK_ONE || ( mkdir -p ${dir} && echo folderNEW_ONE )" /usr/bin/scp $CodeFileName root@$CODE_IP_ONE:$CodeFileName /usr/bin/ssh root@$CODE_IP_TWO "[ -d ${dir} ] && echo folderOK_TWO || ( mkdir -p ${dir} && echo folderNEW_TWO )" /usr/bin/scp $CodeFileName root@$CODE_IP_TWO:$CodeFileName /usr/bin/ssh root@$CODE_IP_THREE "[ -d ${dir} ] && echo folderOK_THREE || ( mkdir -p ${dir} && echo folderNEW_THREE )" /usr/bin/scp $CodeFileName root@$CODE_IP_THREE:$CodeFileName echo "Inotify file change at ${date} by path with ${CodeFileName}" done
另外應用中還發現inotifywait可能會意外退出,所以需要增加一個狀態檢測。
#!/bin/bash number=$(ps -ef|grep inotifywait|wc -l) if [ $number -lt 2 ] then date=$(date -d "today" +%Y-%m-%d) /usr/bin/cp /var/log/inotify-tools-service.log /var/log/inotify-tools-service.${date}.log /usr/bin/bash /var/tmp/inotify-tools-filename-service.sh > /var/log/inotify-tools-service.log 2>&1 & echo "inotify-tools-is-reloading......" else echo "inotify-tools-is-runing......" fi
看完上述內容,你們掌握Inotifywait中怎么利用scp實現內網多服務器文件實時同步的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。