在爱立信实习Linux管理员也有一个月了。最近老大让我修改一个rsync自动备份的脚本。提出两个需求:第一,把不需要的文件过滤掉。第二,report的格式要好看一点。改好的脚本如下,分享一下:

 

#!/bin/bash
set -x

#Get hostname
HOSTNAME=`hostname`

#Check autofs availablity
ls /net/150.236.72.6/vol/vol_ipos_etos17
if [ $? = 0 ] ; then
  echo AUTOFS GOOD on "$HOSTNAME" > /tmp/fasdkl921jkl.`date  +%Y%m%d`
else
  echo AUTOFS NOT Working on "$HOSTNAME" > /tmp/fasdkl921jkl.`date  +%Y%m%d`
fi

#Create log file
LOG=/net/150.236.72.6/vol/vol_ipos_etos17/scripts/LOG/"$HOSTNAME"_RSYNC`date  +%Y%m%d%H%M`.log
if [ ! -f $LOG ] ; then
        touch $LOG
        echo $LOG
fi

GENERAL_LOG=/net/150.236.72.6/vol/vol_ipos_etos17/scripts/LOG/general.log
if [ ! -f $GENERAL_LOG ] ; then
        touch $GENERAL_LOG
        echo $GENERAL_LOG
fi

#if `hostname`
DATA=`date  +%Y%m%d`
time rsync -avzpo --delete  --exclude "sjenkins" --exclude "tof-projectDir*" --exclude "ersoam-projectDir*" --exclude "build-rp-wr*" /local/workspace/* /net/150.236.72.6/vol/vol_ipos_etos17/$HOSTNAME/ >> $LOG
if [ $? = 0 ] ; then
  echo Backup of "$HOSTNAME" on "$DATA" success at_`date  +%Y%m%d%H%M` start at__"$DATA" >> $GENERAL_LOG
 else
  echo Backup of "$HOSTNAME" on "$DATA" fail at_`date  +%Y%m%d%H%M`start at__"$DATA" >> $GENERAL_LOG
fi

#Mail function
COUNT_BACKUP=`more $GENERAL_LOG |grep $DATA |wc -l`
if [ $COUNT_BACKUP -eq 9 ]
then
TODAY=`date +%Y-%m-%d`
MAIL_LOG=`pwd`/$TODAY.html
MAIL_FROM=ge.jiang@ericsson.com
MAIL_TO=ge.jiang@ericsson.com
cd /net/150.236.72.6/vol/vol_ipos_etos17/
used=`df -h .|grep %|grep -v Filesystem|awk '{print $4}'`
if [ -f $MAIL_LOG ];then
rm $MAIL_LOG
touch $MAIL_LOG
fi
echo "From: ${MAIL_FROM}">>${MAIL_LOG}
echo "To: ${MAIL_TO}">>${MAIL_LOG}
echo "Content-type: text/html;charset=UTF-8 ">>${MAIL_LOG}
echo "Subject:server backup report  on ${TODAY} ">>${MAIL_LOG}
echo "">>${MAIL_LOG}
echo "<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>
Backup has been finished,and $used diskspace has been used.
<br>
<br />+++++++++++++++++++++  Backup  Results on $TODAY  +++++++++++++++++++++<br />">>${MAIL_LOG}
echo "<table width=\'90%\' border=\'1\'>">>${MAIL_LOG}
declare -a s
declare -a t
declare -a f
declare -i l
l=`more $GENERAL_LOG |grep $DATA|wc -l`
s=`more $GENERAL_LOG |grep $DATA|awk '{print $3}'`
t=`more $GENERAL_LOG |grep $DATA|awk '{print $7}'|awk -F "_" '{print $2}'|cut -c 7-`
f=`more $GENERAL_LOG |grep $DATA|awk '{print $6}'`
echo " <tr  bgcolor=\'#EF9024\'>
        <td>Server name</td>">>${MAIL_LOG}
for i in $s
do
echo "<td>$i</td>">>${MAIL_LOG}
done
echo "</tr>">>${MAIL_LOG}
echo " <tr  bgcolor=\'#EF9024\'>
        <td>Finish time</td>">>${MAIL_LOG}
for i in $t
do
echo "<td>$i</td>">>${MAIL_LOG}
done
echo "</tr>">>${MAIL_LOG}
echo " <tr  bgcolor=\'#EF9024\'>
        <td>Finish status</td>">>${MAIL_LOG}
for i in $f
do
echo "<td>$i</td>">>${MAIL_LOG}
done
echo "</tr>">>${MAIL_LOG}
cat ${MAIL_LOG} | sendmail -t
else
  echo Backup partially finished.
fi
                                                               

  第一个需求,通过修改这条语句实现:

time rsync -avzpo --delete  --exclude "sjenkins" --exclude "tof-projectDir*" --exclude "ersoam-projectDir*" --exclude "build-rp-wr*" /local/workspace/* /net/150.236.72.6/vol/vol_ipos_etos17/$HOSTNAME/ >> $LOG  

--exclude 过滤掉不需要备份的文件,这里采用的是通配符的方法。有点偷懒。如果要过滤掉的文件较多的话,可以放到一个文件中,命令改成 --exclude-from=file-dir,更加详细的参考这边文章。
http://blog.csdn.net/leo_farari/article/details/7699339


第二个需求,我采用sendmail发送html邮件实现。主要是对general.log文件进行分析,把分析结果写进html,然后发送给老大。
让我更加熟悉了awk和cut等的使用。

sendmail功能通过语句
cat ${MAIL_LOG} | sendmail -t   实现。但是脚本要注意添加邮件头如下:
echo "From: ${MAIL_SENDER}">>${MAIL_LOG}
echo "To: ${MAIL_TO}">>${MAIL_LOG}
echo "Content-type: text/html;charset=UTF-8 ">>${MAIL_LOG}
echo "Subject:server backup report  on ${TODAY} ">>${MAIL_LOG}



至此,脚本实现了全部需求。
posted on 2013-08-28 09:45  ahujack  阅读(555)  评论(0编辑  收藏  举报