博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一个php写的linux下lvm自动快照实现脚本
阅读量:5822 次
发布时间:2019-06-18

本文共 6479 字,大约阅读时间需要 21 分钟。

 ==========crontab配置===============

#vi /etc/crontab

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
*/1 * * * * root /usr/bin/php /opt/openfiler/var/etc/snp_script.php >> /root/rec.ini

蓝色字体标注标识要添加的部分。

在每一行的开头有五个“*”号,分别表示分、时、日、月、星期。“*/1”表示每分钟执行一次。

所有路径必须为绝对路径。

 

                      ===============php部分===================

#!/usr/bin/php
load($snapshots_path); $snp_XMLDoc=$snp_xml->getElementsByTagName("snapshots")->item(0); $snp_date=date("Y-m-d H:i:s"); $xml=new DOMDocument('1.0'); $xml->load($schedules_path); $XMLDoc=$xml->getElementsByTagName("schedules")->item(0); $isLast=false; //========DOM读取XML======== $schedules=array(); $cou=0; foreach($XMLDoc->getElementsByTagName("schedule") as $schedule){ $sch=array(); $sch["name"]=$schedule->getAttribute("name"); $sch["interval"]=$schedule->getAttribute("interval"); $sch["count"]=$schedule->getAttribute("count"); $sch["size"]=$schedule->getAttribute("size"); $cou1=0; $sch_volumes=array(); foreach($schedule->getElementsByTagName("volume") as $sch_volume){ $last=$sch_volume->getAttribute("last"); if(empty($last)||$last==""){ global $isLast; $last=$sch_volume->getAttribute("time"); $attr=$xml->createAttribute("last"); $attr->appendChild($xml->createTextNode($last)); $sch_volume->appendChild($attr); $isLast=true; $xml->save($schedules_path); } $sch_volumes[$cou1++]=array($sch_volume->nodeValue,$last,$sch_volume->getAttribute("vg")); } $sch["volumes"]=$sch_volumes; $schedules[$cou++]=$sch; } foreach($schedules as $schedule){ $interval=explode(" ",$schedule["interval"]); //print_r($interval); switch($interval[1]){ case "min": $in=4; break; case "hour": $in=3; break; case "day": $in=2; break; case "month"; $in=1; break; case "year": $in=0; break; case "week"; $in=-1; break; } print("Last:".($isLast?"yes":"no")."\n"); foreach($schedule["volumes"] as $volume){ $start_time=explode("-",$volume[1]); if($in==-1){ if($isLast||($now[$in]-$start_time[$in]!=0&&($now[2]-$start_time[2])%(7*$interval[0])==0)){ shell_exec("/sbin/lvcreate -s -L ".$schedule["size"]." -n of.snapshot.".$volume[0].".autosn".$snp_date_rec." ".$volume[2]); } } else if($isLast||($now[$in]-$start_time[$in]!=0&&($now[$in]-$start_time[$in])%$interval[0]==0)){ //print("\n".$interval[0].":\n"); $command="/sbin/lvcreate -s -L ".$schedule["size"]." -n of.snapshot.".$volume[0].".autosn".$snp_date_rec." /dev/".$volume[2]."/".$volume[0]; print $command; $xpath=new DOMXPath($xml); $query="/schedules/user/schedule[@name='".$schedule["name"]."']/volume[@vg='".$volume[2]."' and text()='".$volume[0]."']"; $node=$xpath->query($query)->item(0); $node->setAttribute("last",$snp_date_rec); $xml->save($schedules_path); shell_exec($command); $snp=$snp_xml->createElement("snapshot"); //print $snp_xml->saveXML(); $attr=$snp_xml->createAttribute("id"); $attr->appendChild($snp_xml->createTextNode("autosn".$snp_date_rec)); $snp->appendChild($attr); $attr=$snp_xml->createAttribute("lvname"); $attr->appendChild($snp_xml->createTextNode($volume[0])); $snp->appendChild($attr); $attr=$snp_xml->createAttribute("vgname"); $attr->appendChild($snp_xml->createTextNode($volume[2])); $snp->appendChild($attr); $attr=$snp_xml->createAttribute("share"); $attr->appendChild($snp_xml->createTextNode("no")); $snp->appendChild($attr); $attr=$snp_xml->createAttribute("rotateid"); $attr->appendChild($snp_xml->createTextNode("100")); $snp->appendChild($attr); $attr=$snp_xml->createAttribute("timestamp"); $attr->appendChild($snp_xml->createTextNode($snp_date)); $snp->appendChild($attr); $attr=$snp_xml->createAttribute("size"); $attr->appendChild($snp_xml->createTextNode($schedule["size"])); $snp->appendChild($attr); $snp_XMLDoc->appendChild($snp); print $snp_xml->saveXML(); } //删除过期快照 $count=0; foreach($snp_XMLDoc->getElementsByTagName("snapshot") as $snapshot){ if($volume[0]==$snapshot->getAttribute("lvname")&&$snapshot->getAttribute("rotateid")==100){ $count++; } } //print "\n\n".$count.": ".$schedule["count"]; if($count>$schedule["count"]){ foreach($snp_XMLDoc->getElementsByTagName("snapshot") as $snapshot){ $snpname=$snapshot->getAttribute("id"); $lvname=$snapshot->getAttribute("lvname"); if($volume[0]==$lvname && $snapshot->getAttribute("rotateid")==100){ $command="/sbin/lvremove -f /dev/".$volume[2]."/of.snapshot.".$volume[0].".".$snpname; print "\n".$command."\n"; shell_exec($command); $snp_XMLDoc->removeChild($snapshot); break; } } } } } $snp_xml->save($snapshots_path); print("\n====================================== \n"); ?>

  

                       ==========XML部分============

snapshot.xml:

schedules.xml:

mir1

 

转载地址:http://ribdx.baihongyu.com/

你可能感兴趣的文章
没有JS的前端:体积更小、速度更快!
查看>>
数据指标/表现度量系统(Performance Measurement System)综述
查看>>
GitHub宣布推出Electron 1.0和Devtron,并将提供无限制的私有代码库
查看>>
论模式在领域驱动设计中的重要性
查看>>
有关GitHub仓库分支的几个问题
查看>>
EAServer 6.1 .NET Client Support
查看>>
锐捷交换机密码恢复(1)
查看>>
Method Swizzling对Method的要求
查看>>
佛祖保佑,永不宕机
查看>>
四、配置开机自动启动Nginx + PHP【LNMP安装 】
查看>>
Linux 目录结构及内容详解
查看>>
OCP读书笔记(24) - 题库(ExamD)
查看>>
.net excel利用NPOI导入oracle
查看>>
$_SERVER['SCRIPT_FLENAME']与__FILE__
查看>>
hive基本操作与应用
查看>>
excel快捷键设置
查看>>
html5纲要,细谈HTML 5新增的元素
查看>>
Android应用集成支付宝接口的简化
查看>>
[分享]Ubuntu12.04安装基础教程(图文)
查看>>
django 目录结构修改
查看>>