Chinaunix首页 | 论坛 | 博客
  • 博客访问: 102297
  • 博文数量: 7
  • 博客积分: 1695
  • 博客等级: 上尉
  • 技术积分: 420
  • 用 户 组: 普通用户
  • 注册时间: 2005-08-03 15:03
文章分类

全部博文(7)

文章存档

2008年(7)

我的朋友
最近访客

分类:

2008-06-30 15:21:28

为了方便统一的备份多台主机,不同目录下的文件,我写了如下脚本,命令为runbackup.pl,将主机信息,目录信息写到yaml文件中,然后运行脚本做一个统一的备份:
ymal文件如下:
[root@centerws bin]# cat runbackup.yml
---
site1:
        host: host1
        source_path: /mnt/www
        des_path: /home/backup-files
        arch_name: site1
        filelist:
                - sueprsun.biz
        comment: 站点1
site2:
        host: host2
        source_path: /home/site
        des_path: /home/backup-files
        arch_name: site2
        filelist:
                - site2
        comment: 站点2
bbs:
        host: bbs
        source_path: /home/jboss/server/default/deploy
        des_path: /home/backup-files
        arch_name: bbs
        filelist:
                - bbs.war
                - bbs-ds.xml
        comment: 论坛

运行脚本:

[root@centerws bin]# runbackup.pl all

这样就会在本机的/home/backup-files下创当天的备份,目录为:6-30

如果执行单独的备份
[root@centerws bin]# runbackup.pl bbs

脚本内容如下,没有什么技术含量,主要是要学会在脚本中使用ymal文件着为配置文件:


#!/usr/bin/perl -w

use strict;

use YAML;

sub backupfiles {
        my ($host,$source_path,$des_path,$arch_name,@backupfiles)=@_;
#创建目录

        mkdir $des_path unless -d $des_path;
#进入目录

        chdir $des_path;
#创建主机名目录

        mkdir $host unless -d $host;
        chdir $host;
#执行shell命令

        `ssh $host "cd $source_path;tar zcvf - @backupfiles " >$arch_name`;
}

#指定yaml文件路径

my $file="/root/bin/runbackup.yml";
#读放配置文件

my $hashref=YAML::LoadFile($file);
#获取日期信息

my ($MONTH,$DAY)=(localtime)[4,3];
$MONTH++;
#获取命令行参数

my $key=shift;
#执行一个全备份

if ($key eq "all"){
        foreach my $key (keys %$hashref)
        {
#获取主机名

        my $host=$$hashref{$key}{host};
#源路径名

        my $source_path=$$hashref{$key}{source_path};
#备份路径

        my $des_path=$$hashref{$key}{des_path};
#在备份路径上加一层日期目录

        $des_path=${des_path}."/".${MONTH}."-".${DAY};
#打包文件名

        my $arch_name=$$hashref{$key}{arch_name};
#备份文件列表

        my @backupfiles=@{$$hashref{$key}{filelist}};
#打包文件名中添加日期信息

        $arch_name=${arch_name}.".${MONTH}-${DAY}.tgz";
#使用ssh和tar进行备份

        backupfiles($host,$source_path,$des_path,$arch_name,@backupfiles);
        }
}else{
#执行某一项目备份

        my $host=$$hashref{$key}{host};
        my $source_path=$$hashref{$key}{source_path};
        my $des_path=$$hashref{$key}{des_path};
        $des_path=${des_path}."/".${MONTH}."-".${DAY};
        my $arch_name=$$hashref{$key}{arch_name};
        my @backupfiles=@{$$hashref{$key}{filelist}};

        $arch_name=${arch_name}.".${MONTH}-${DAY}.tgz";
        backupfiles($host,$source_path,$des_path,$arch_name,@backupfiles);
}

阅读(929) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~