当前位置: 技术问答>linux和unix
shell脚本运行出错
来源: 互联网 发布时间:2016-12-14
本文导语: 我做mysql数据库备份,发现了一个很诡异的事情,写了脚本,手动运行可以的,但是假如crontab之后运行,发现到压缩(tar)的时候就出错了,这是为什么呢?以下附脚本: test -d $BACKUP/$NOW || mkdir $BACKUP/$NOW DBS="spp_...
我做mysql数据库备份,发现了一个很诡异的事情,写了脚本,手动运行可以的,但是假如crontab之后运行,发现到压缩(tar)的时候就出错了,这是为什么呢?以下附脚本:
test -d $BACKUP/$NOW || mkdir $BACKUP/$NOW
DBS="spp_vbb"
for db in $DBS
do
### Create dir for each databases, backup tables in individual files ###
test -d $BACKUP/$db-$NOW && rm -fr $BACKUP/$db-$NOW
mkdir $BACKUP/$db-$NOW
echo "####################$db####################" >> $LOGFILE
for i in `echo "show tables" | $MYSQL -u $MUSER -h $MHOST -p$MPASS $db | grep -v Tables_in_`
do
# FILE=$BACKUP/$NOW/$db/$i.sql.gz
echo $i
$BACKSCRIPT $db $i --result-file=$BACKUP/$db-$NOW/$i.sql 2>> $LOGFILE
#MDATE=`date +%m`
done
cd $BACKUP/
$TAR -zvcf $db-$NOW.tar.gz $db-$NOW 2>> $LOGFILE #此处就会出错,我在目录下找不到tar包,可以找到spp_vbb-20110707的目录
$CHMOD 0777 $db-$NOW.tar.gz
if [ $? -eq 0 ]; then
rm -fr $db-$NOW
fi
echo "$DATENOW DATABASE $db AS $db-$NOW.tar.gz" >> $LOGFILE
mv $db-$NOW.tar.gz $NOW/
done
echo "$DATENOW DATABASE AS $NOW.tar.gz ok" >> $LOGFILE
exit 0
test -d $BACKUP/$NOW || mkdir $BACKUP/$NOW
DBS="spp_vbb"
for db in $DBS
do
### Create dir for each databases, backup tables in individual files ###
test -d $BACKUP/$db-$NOW && rm -fr $BACKUP/$db-$NOW
mkdir $BACKUP/$db-$NOW
echo "####################$db####################" >> $LOGFILE
for i in `echo "show tables" | $MYSQL -u $MUSER -h $MHOST -p$MPASS $db | grep -v Tables_in_`
do
# FILE=$BACKUP/$NOW/$db/$i.sql.gz
echo $i
$BACKSCRIPT $db $i --result-file=$BACKUP/$db-$NOW/$i.sql 2>> $LOGFILE
#MDATE=`date +%m`
done
cd $BACKUP/
$TAR -zvcf $db-$NOW.tar.gz $db-$NOW 2>> $LOGFILE #此处就会出错,我在目录下找不到tar包,可以找到spp_vbb-20110707的目录
$CHMOD 0777 $db-$NOW.tar.gz
if [ $? -eq 0 ]; then
rm -fr $db-$NOW
fi
echo "$DATENOW DATABASE $db AS $db-$NOW.tar.gz" >> $LOGFILE
mv $db-$NOW.tar.gz $NOW/
done
echo "$DATENOW DATABASE AS $NOW.tar.gz ok" >> $LOGFILE
exit 0
|
执行的时候把输出信息定向一下,看看
your.sh 1>/tmp/1.out 2>/tmp/2.out
your.sh 1>/tmp/1.out 2>/tmp/2.out
|
在crontab中执行时定向一下
|
估计和你的环境变量有关
cron跑的时候没有对应的环境,把tar的执行目录写全呢?
cron跑的时候没有对应的环境,把tar的执行目录写全呢?
|
这种情况十有八九是PATH和tar中绝对路径的问题,仔细检查