>백엔드 개발 >PHP 튜토리얼 >使用php结合rsync、inotify实现的实时备份脚本!

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

WBOY
WBOY원래의
2016-06-23 13:20:041127검색

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);        }    }

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

    

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


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.