Rumah > pembangunan bahagian belakang > tutorial php > 使用php结合rsync、inotify实现的实时备份脚本!

使用php结合rsync、inotify实现的实时备份脚本!

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Lepaskan: 2016-06-23 13:20:04
asal
1189 orang telah melayarinya

1. php脚本<?php         #解析配置文件     $arr=parse_ini_file('config.ini',true);     #获取符合“监控”要求的目录格式的路径          $dirListen=implode(' ',$arr['srcdir']);     # 获取符合“同步目录”要求的格式的目录路径     $sdDir=dir_path_parse($arr['srcdir'],$arr['dstdir']);     #运行程序后先同步一次     rsync_data($sdDir['src'],$sdDir['dst']);     #监控文件系统变化     $p=popen('inotifywait -mrq --format "%T %w\%f %e" -e create,modify,delete,move '.$dirListen,'r');     #文件系统发生变化时,进行数据同步     while($f=fgets($p)){            #重构字符串用以日志显示        $arr=explode(' ',trim($f));                $event['file']=implode(array_splice($arr,2,-1));        list($event['date'],$event['time'],$event['oper'])=$arr;                #print_r($event);        $strLog='来自'.gethostbyname(gethostname()).'的操作:'.$event['oper'].'  '.$event['file'].' 于 '.$event['date'].'_'.$event['time'].' 同步备份到服务器上...';        $strLog .= rsync_data($sdDir['src'],$sdDir['dst'])."\r\n";        file_put_contents('databak.log',$strLog,FILE_APPEND);        echo $strLog;            }     #释放资源     pclose($p);########################################函数################################################         #同步备份    function rsync_data($srcdir,$dstdir){            exec("rsync -togrvzp --delete --progress $srcdir $dstdir");            return "OK";    }            #源目录和目的目录路径处理    function dir_path_parse($srcdir,$dstdir){        if(php_uname('s') == 'Windows NT'){            foreach ($srcdir as $k=>$v) {                $srcdir[$k]='/cygdrive/'.preg_replace('/[^\w-\.]{1,}/','/',$v);            }            $srcdirAll=implode(' ', $srcdir);            $dstdir=implode('::',$dstdir);            return array('src'=>$srcdirAll, 'dst'=>$dstdir);        }else{            $srcdirAll=implode(' ', $srcdir);            $dstdir=implode('::',$dstdir);            return array('src'=>$srcdirAll, 'dst'=>$dstdir);        }    }
Salin selepas log masuk

2、config.ini #用来配置需要备份的目录

[srcdir]dir1=d:\test ;目录不能以"\"结尾dir2=d:\scan[dstdir]host=10.74.60.71 ;rsync服务器地址shareDirName=zhangsan ;rsync服务器共享出来的目录
Salin selepas log masuk


Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan