LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1170|回复: 1

一段自动tar的脚本,放在crontab里面定时执行就出问题了

[复制链接]
发表于 2005-7-4 12:15:12 | 显示全部楼层 |阅读模式
脚本如下:
#! /bin/sh
DAY=$(date +%y%m%d)
NOW=$(date +%Y-%m-%d-%H:%M:%S)
BACKUP_LOG=/var/log/backup.log

#User directory VAR
HK=huangkai
DENS=dens
DXF=dongxf
SPRITE=sprite
TEST=test
WJB=wangjb
ZZH=zengzh

#Delete old backup file.打包之前,要把目录下所有tar文件删除,
#避免重下面synthesize函数,把旧的集合包打进新的集合包里.
delete()
{
if [ -f /home/backup/*.tar ]
        then
                echo "----------------------------------------" >> $BACKUP_LOG
                echo [$NOW] "Deletting old backup file." >> $BACKUP_LOG
                /bin/rm -f `ls /home/backup|grep .tar`
        else
                echo "----------------------------------------"
                echo [$NOW] "Directory is null."      
if [ $? = 0 ]
        then
                echo [$NOW] "Delete old backup file is OK" >> $BACKUP_LOG
        else
                echo [$NOW] "Error with rm!" >> $BACKUP_LOG
                exit1
        fi
        fi
}
#Backup,把目标目录分别打包,并以目录的名字命名.
backup()
{
if [ ! -f /home/backup/*.tar ]
        then
                echo [$NOW] "Backup is begin." >> $BACKUP_LOG
                tar zcvf /home/backup/"$HK"_"$DAY".tar /home/$HK
                tar zcvf /home/backup/"$DENS"_"$DAY".tar /home/$DENS
                tar zcvf /home/backup/"$DXF"_"$DAY".tar /home/$DXF
                tar zcvf /home/backup/"$SPRITE"_"$DAY".tar /home/$SPRITE
                tar zcvf /home/backup/"$TEST"_"$DAY".tar /home/$TEST
                tar zcvf /home/backup/"$WJB"_"$DAY".tar /home/$WJB
                tar zcvf /home/backup/"$ZZH"_"$DAY".tar /home/$ZZH
if [ $? = 0 ]
        then
                echo [$NOW] "Backup is accomplish" >> $BACKUP_LOG
                echo "----------------------------------------" >> $BACKUP_LOG
        else
                echo [$NOW] "Error with tar!" >> $BACKUP_LOG
        fi
        fi
}

#Backup accomplish log
backup_log()
{
if [ -f /home/backup/$DAY.tar ]
        then
            echo [$NOW] "Backup is accomplish" >> $BACKUP_LOG
            echo "----------------------------------------" >> $BACKUP_LOG
        fi
}


#把散的包集合成一个集合包里面,方便传送.
synthesize()
{
tar zcvf /home/backup/$DAY.tar /home/backup/*.tar && rm -f `ls /home/backup|grep .tar | grep -v "^$DAY.tar"`
}

delete
if [ $? = 0 ];then
backup
if [ $? = 0 ];then
synthesize
fi
fi

期望实现如下:
1.检查/home/backup目录下是否有tar包,如果有,删除.
2.把目标打包成tar文件,存放在/home/backup目录下
3.把/home/backup目录下的所有tar包,打包成一个集合tar包.完成后,把其他散的包删除.此时/home/backup目录下只剩一个今天日期为名字的集合tar包.

手动执行,没发现问题.
但如果放在crontab里面,定时执行的话,delete函数好像就失灵了.
synthesize函数打包的$DAY.tar就删不掉..
导致/backup目录下有050704.tar(7月4号的集合包)与050705.tar(今天新打的包)
发表于 2005-7-9 06:34:24 | 显示全部楼层
Post by sprite_gz
脚本如下:
#! /bin/sh
DAY=$(date +%y%m%d)
NOW=$(date +%Y-%m-%d-%H:%M:%S)
BACKUP_LOG=/var/log/backup.log

#User directory VAR
HK=huangkai
DENS=dens
DXF=dongxf
SPRITE=sprite
TEST=test
WJB=wangjb
ZZH=zengzh

#Delete old backup file.打包之前,要把目录下所有tar文件删除,
#避免重下面synthesize函数,把旧的集合包打进新的集合包里.
delete()
{
if [ -f /home/backup/*.tar ]
        then
                echo "----------------------------------------" >> $BACKUP_LOG
                echo [$NOW] "Deletting old backup file." >> $BACKUP_LOG
                /bin/rm -f `ls /home/backup|grep .tar`
        else
                echo "----------------------------------------"
                echo [$NOW] "Directory is null."      
if [ $? = 0 ]
        then
                echo [$NOW] "Delete old backup file is OK" >> $BACKUP_LOG
        else
                echo [$NOW] "Error with rm!" >> $BACKUP_LOG
                exit1
        fi
        fi
}
#Backup,把目标目录分别打包,并以目录的名字命名.
backup()
{
if [ ! -f /home/backup/*.tar ]
        then
                echo [$NOW] "Backup is begin." >> $BACKUP_LOG
                tar zcvf /home/backup/"$HK"_"$DAY".tar /home/$HK
                tar zcvf /home/backup/"$DENS"_"$DAY".tar /home/$DENS
                tar zcvf /home/backup/"$DXF"_"$DAY".tar /home/$DXF
                tar zcvf /home/backup/"$SPRITE"_"$DAY".tar /home/$SPRITE
                tar zcvf /home/backup/"$TEST"_"$DAY".tar /home/$TEST
                tar zcvf /home/backup/"$WJB"_"$DAY".tar /home/$WJB
                tar zcvf /home/backup/"$ZZH"_"$DAY".tar /home/$ZZH
if [ $? = 0 ]
        then
                echo [$NOW] "Backup is accomplish" >> $BACKUP_LOG
                echo "----------------------------------------" >> $BACKUP_LOG
        else
                echo [$NOW] "Error with tar!" >> $BACKUP_LOG
        fi
        fi
}

#Backup accomplish log
backup_log()
{
if [ -f /home/backup/$DAY.tar ]
        then
            echo [$NOW] "Backup is accomplish" >> $BACKUP_LOG
            echo "----------------------------------------" >> $BACKUP_LOG
        fi
}


#把散的包集合成一个集合包里面,方便传送.
synthesize()
{
tar zcvf /home/backup/$DAY.tar /home/backup/*.tar && rm -f `ls /home/backup|grep .tar | grep -v "^$DAY.tar"`
}

delete
if [ $? = 0 ];then
backup
if [ $? = 0 ];then
synthesize
fi
fi

期望实现如下:
1.检查/home/backup目录下是否有tar包,如果有,删除.
2.把目标打包成tar文件,存放在/home/backup目录下
3.把/home/backup目录下的所有tar包,打包成一个集合tar包.完成后,把其他散的包删除.此时/home/backup目录下只剩一个今天日期为名字的集合tar包.

手动执行,没发现问题.
但如果放在crontab里面,定时执行的话,delete函数好像就失灵了.
synthesize函数打包的$DAY.tar就删不掉..
导致/backup目录下有050704.tar(7月4号的集合包)与050705.tar(今天新打的包)


在debug mode运行, #!/bin/bash -xv, 然后将整个code输出定向到log文件。

  1. #!/bin/bash -xv
  2. (
  3. ....
  4. ....
  5. ) 2>&1 >/tmp/something.log
复制代码

crob运行后,查看log文件。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表