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服务器共享出来的目录
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。