2010年12月30日 星期四

縣內備份程式

#! /usr/bin/perl
## 學藉系統備份程式perl版 by 二林國小 村仔 2009.07;2010.07修正
## 功用:備份、FTP備份檔到遠方主機、更新學籍系統、更新系統
## 適用環境 ubuntu 主機。

$conf{'chktime'}='Y';##要不要進行校時
$conf{'bakup'}='Y';##要不要備份某些目錄, 設定值 Y/N
$conf{'ftp'}='Y';##要不要透過ftp將資料送到遠方主機 設定值 Y/N
$conf{'upsfs'}='Y';##要不要更新學藉系統, 設定值 Y/N
$conf{'upSYS'}='Y';##要不要更新系統, 設定值 Y/N

#每類型備份檔案最多數量
$lim=12;

## 學藉系統路徑,保留最後斜線
$conf{'sfspath'}='/home/webadmin/html/sfs3/';

##  欲備份目錄及備份檔的前置字元,注意不要破壞格式,可以自行增添多組
##  $BB{前置字元}='備份目錄';不須有後面的斜線
$BB{'SFS_DB'}="/var/lib/mysql/sfs3";
$BB{'SFS_data'}="/home/webadmin/html/sfs3/data";

$ftp{'host'}='192.168.11.6';##遠方主機
$ftp{'path'}='BB/';##登入後檔案放置目錄
$ftp{'user'}='edu';##遠方主機帳號
$ftp{'pass'}='123';##遠方主機密碼

## 學藉系統下載網址
$conf{'url'}='http://sfscvs.tcc.edu.tw/sfs_stable.tar.gz';


#備份檔放置目錄
$BAK="/home/webadmin/baksfs/";

##----------以下不用修改----------------###

##關閉防火牆
#`/etc/init.d/firewall stop`;

###----0.校時----###
if ($conf{'chktime'} eq 'Y'){
  `/usr/sbin/ntpdate  time.stdtime.gov.tw   > /dev/null `;
  `/usr/sbin/ntpdate  time.stdtime.gov.tw   > /dev/null `;
  `/usr/sbin/ntpdate  time.stdtime.gov.tw   > /dev/null `;
}



###----1.檢查備份目錄存在否----###
if (!-e $BAK) {
  `/bin/mkdir -p $BAK`;
  `/bin/sync `;
  `/bin/sync `;
}

###----2.關閉apache及MySQL----###
  `/etc/init.d/apache2  stop `;
  `/etc/init.d/mysql  stop `;



###----3.設定作業時間字串----###

$TT=`date "+%Y%m%d_%H%M%S"`;
## perl用chomp函數去掉結尾的CR/LF
chomp $TT;


##-----4.備份檔案作業、刪除多餘備份檔-----------#####
if ($conf{'bakup'} eq 'Y'){

while (($key, $value)=each %BB) {
 $fi=$BAK.$key."_".$TT.".tgz";
 @total = split('/',$value);
 $data=pop @total;
 $path = join '/' , @total;
 `cd $path ;/bin/tar -zcf $fi  $data `;
 `/bin/sync `;
 `/bin/sync `;
  }
   ##刪除多餘備份檔作業
while (($key, $value)=each %BB) {
 
 $num=`/bin/ls $BAK$key* | /usr/bin/wc -l`;
 
 ## perl用chomp函數去掉結尾的CR/LF
 chomp $num;
 
 if ($num > $lim) {
  $delnum=$num-$lim;
  @dfiles=`/bin/ls $BAK$key* `;
  $i=0;
  while ($i < $delnum) {
  chomp $dfiles[$i];
  unlink $dfiles[$i]  if -e $dfiles[$i];
  $i++;
  }
 }
  }

}


##-----5.送檔案到ftp主機(只送本次)-----------#####
if (($conf{'ftp'} eq 'Y') && ($conf{'bakup'} eq 'Y' ) ){
  while (($key, $value)=each %BB) {
 $fi=$BAK.$key."_".$TT.".tgz";
 `/usr/bin/ncftpput -u $ftp{user} -p $ftp{pass} $ftp{host} $ftp{path} $fi `;
   }
}

##-----6.更新學籍系統-----------#####
if ($conf{'upsfs'} eq 'Y'){
  `cd /tmp;/usr/bin/wget -q $conf{'url'} `;
  `/bin/sync `;
  `/bin/sync `;
  
  # 判斷檔案是否存在
  if (-e '/tmp/sfs_stable.tar.gz' ) {  
  `cd /tmp;/bin/tar zxf sfs_stable.tar.gz`;
  `/bin/rm  /tmp/setup.sh`;
  `/bin/rm  /tmp/sfs3_stable/install.php`;
  `/bin/cp -a /tmp/sfs3_stable/* $conf{'sfspath'} `;
  `/bin/rm  /tmp/sfs_stable.tar.gz`;
  `/bin/rm -rf /tmp/sfs3_stable`;
  `/bin/sync `;
  `/bin/sync `;
  }
}


##-----7.更新系統檔案-----------#####

if ($conf{'upSYS'} eq 'Y'){
  `/usr/bin/apt-get  update  > /dev/null `;
  `/usr/bin/apt-get -y upgrade  > /dev/null `;
  ## `/usr/bin/apt-get -y dist-upgrade  > /dev/null `;
  `/usr/bin/apt-get autoclean  > /dev/null `;
  `/bin/sync `;
  `/bin/sync `;
}

##-----8.啟動apache及 MySQL-----------#####
  `/etc/init.d/apache2  start `;
  `/etc/init.d/mysql  start `;
#  `/etc/init.d/firewall start`;

沒有留言:

張貼留言