<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## 使用Inotify+rsync同步數據 Inotify 一種強大的、細粒度的、異步文件系統監控機制,它滿足各種各樣的文件監控需要,可以監控文件系統的訪問屬性、讀寫屬性、權限屬性、刪除創建、移動等操作,也就是可以監控文件發生的一切變化。 inotify-tools 是一個C庫和一組命令行的工作,提供Linux下inotify的簡單接口。inotify-tools安裝后會得到inotifywait和inotifywatch這兩條命令: * inotifywait命令可以用來收集有關文件訪問信息,Linux發行版一般沒有包括這個命令,需要安裝inotify-tools,這個命令還需要將inotify支持編譯入Linux內核,好在大多數Linux發行版都在內核中啟用了inotify。 * inotifywatch命令用于收集關于被監視的文件系統的統計數據,包括每個 inotify 事件發生多少次。 ### 在CentOS下安裝inotifywait ~~~ #yum search inotify-tools #yum info inotify-tools sudo yum install inotify-tools ~~~ > MacOS下可以使用fswatch替代。fswatch是蘋果內置軟件,也可以在其他平臺上安裝。 ### 配置腳本 ~~~ #!/usr/bin/env bash # 記錄進程號,可使用 ps -ef |grep notify.sh 查看 LOCK_NAME="/var/run/notify.pid" # 本地待同步的目錄 SOURCE="/www/vhost" # 目標服務器及目錄 TARGET="root@<ip_address>:/www/" # 排除的目錄 EXCLUDE="cache" # 遠程登錄命令 SSH="ssh -p 22" # 日志 LOG="/var/log/notify_update_" # 設置禁止重定向覆蓋 set -o noclobber ,即不能使用 > ,但可以使用 >> # 設置恢復重定向覆蓋 set +o noclobber ,即職能使用 >> 和 >| # 2> 標準錯誤(stderr) # 1> 標準輸出(stdout) # &> 同時輸出到 stdout 和 stderr # /dev/null 位桶(bit bucket)或黑洞 # true: 0,false: 1。 # $? 退出碼 if (set -o noclobber; echo "$$" > "$LOCK_NAME") 2> /dev/null; then # trap command signal # INT 中斷進程 CTRL+C # TERM 軟件終止信號 # 全部信號列表:trap -l # 非正常退出時,自動刪除進程文件 trap 'rm -f "$LOCK_NAME"; exit $?' INT TERM EXIT # yum install inotifywait # -m | --monitor 持續監聽 # -r | --recursive 遞歸子目錄 # -e | --event <eventl> 指定要監聽的事件,多個事件用逗號隔開 # 文件有變動的事件:create/delete/move/attrib/close_write inotifywait -mr \ # 指定輸出的時間格式,賦給 %T --timefmt '%Y-%m-%d %H:%M' \ # 設置打印格式%T時間;%w觸發事件文件所在絕對路徑;%f觸發事件文件名稱;%e觸發的事件名稱; --format '%T %w%f %e' \ -e create,move,close_write,delete,attrib $SOURCE \ --exclude $EXCLUDE | while read date time file event; do # 當前日期,用于日志文件名 today=`date +%Y-%m-%d` # 遍歷事件 case $event in # 立即更新 MOVED_TO,ISDIR|MOVED_TO | CLOSE_WRITE,CLOSE) # 如果同步未完成,忽略本次同步 ps aux | grep [r]sync if [ $? -ne 0 ]; then # 同步前計時器 t1=`date +%s` # 文件同步 rsync -a --delete --numeric-ids -e $SSH $SOURCE $TARGET & # 同步后計時器 t2=`date +%s` # 計算文件更新完成的時間差 dt=$(($t2 - $t1)) # 寫日志 echo "[${date} ${time}] UPDATE ${file} ${dt}" >> $LOG_${today}.txt fi ;; # 目錄和文件的刪除,可暫不更新 DELETE,ISDIR | DELETE) echo "[${date} ${time}] UPDATE ${file} ${dt}" >> $LOG_${today}.txt ;; # 創建目錄,修改文件和目錄的屬性,可暫不更新 CREATE,ISDIR | ATTRIB,ISDIR | ATTRIB) ;; esac done # 清除進程文件 rm -f $LOCK_NAME #取消信號鎖定 trap - INT TERM EXIT else # 寫進程文件失敗意味著程序在運行中,或者為正常關閉 echo "The application is running, lock file name is $LOCK_NAME." exit 1 fi ~~~ 由于 fswatch 具有跨平臺的優勢,下面給出一個同步化示例。 ~~~ #!/usr/bin/env bash ## 保持源目錄 LOCAL_DIR 和 目標目錄 REMOTE_DIR 同步 ## 源目錄 LOCAL_DIR=/usr/local/var/www/project ## 目標目錄 REMOTE_DIR=/home/www/project # pull #rsync -avz --numeric-ids --exclude-from 'rsync_pull.txt' -e 'ssh -p 2222' pat@1.2.3.4:/home/www/ /usr/local/var/www/ # push fswatch -e "runtime" -e "temp" -d $LOCAL_DIR | while read LOCAL_FILE do ## 構造目標文件(包括文件夾) REMOTE_FILE="${REMOTE_DIR}/${LOCAL_FILE##$LOCAL_DIR/}" SOURCE=$(dirname $LOCAL_FILE)/ TARGET=$(dirname $REMOTE_FILE)/ echo $SOURCE >> ./rsync.log 2>&1 #echo $TARGET rsync \ -P \ -S \ --delete --delete-after \ --exclude-from 'rsync_push.txt' \ -avz -e 'ssh -p 2222' \ $SOURCE \ pat@1.2.3.4:$TARGET done ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看