使用php结合rsync、inotify实现的实时备份脚本!
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"-ecreate,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);########################################函数#################################################同步备份functionrsync_data($srcdir,$dstdir){exec("rsync-togrvzp--delete--progress$srcdir$dstdir");return"OK";}#源目录和目的目录路径处理functiondir_path_parse($srcdir,$dstdir){if(php_uname('s')=='WindowsNT'){foreach($srcdiras$k=>$v){$srcdir[$k]='/cygdrive/'.preg_replace('/[^\w-\.]{1,}/','/',$v);}$srcdirAll=implode('',$srcdir);$dstdir=implode('::',$dstdir);returnarray('src'=>$srcdirAll,'dst'=>$dstdir);}else{$srcdirAll=implode('',$srcdir);$dstdir=implode('::',$dstdir);returnarray('src'=>$srcdirAll,'dst'=>$dstdir);}}
2、config.ini #用来配置需要备份的目录
[srcdir]dir1=d:\test;目录不能以"\"结尾dir2=d:\scan[dstdir]host=10.74.60.71;rsync服务器地址shareDirName=zhangsan;rsync服务器共享出来的目录
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。