当前位置: 技术问答>linux和unix
求教:SHELL脚本在crontab -e里运行问题
来源: 互联网 发布时间:2015-10-09
本文导语: 脚本autorequest.sh文件内容如下: #!/bin/sh #Set the user/password for oracle connection ORAUSER=smserver ORAPWD=fiss #the directory for the new files #OUTPUTDIR=/work/fastech/ OUTPUTDIR=/swap/autogen/requestfile RUNDIR=/swap/autogen TEMPFILE=SMSREQUEST`date +%Y...
脚本autorequest.sh文件内容如下:
#!/bin/sh
#Set the user/password for oracle connection
ORAUSER=smserver
ORAPWD=fiss
#the directory for the new files
#OUTPUTDIR=/work/fastech/
OUTPUTDIR=/swap/autogen/requestfile
RUNDIR=/swap/autogen
TEMPFILE=SMSREQUEST`date +%Y%m%d`
test -d $OUTPUTDIR || mkdir $OUTPUTDIR
#OUTPUTDIR=$OUTPUTDIR/`date +%Y%m%d`
test -f $OUBPUTDIR/$TEMPFILE.TXT && exit
#create genrequest.sql
echo "#!/bin/sh" > $RUNDIR/sedtmp.sh
echo "sed 's/__TODAY__/`date +%y%m%d`/g' $RUNDIR/genrequest.in > $RUNDIR/genrequest.sql" >> $RUNDIR/sedtmp.sh
sh $RUNDIR/sedtmp.sh
rm $RUNDIR/sedtmp.sh
#Collect records
sqlplus $ORAUSER/$ORAPWD @/swap/autogen/genrequest.sql
rm $RUNDIR/genrequest.sql
#Create output directory
test -d $OUTPUTDIR || mkdir $OUTPUTDIR
#grep PRINT $RUNDIR/querytemp.lst | awk '{OFS="t"}{print $1, $2, $3}' > $OUTPUTDIR/$TEMPFILE.TXT
grep "STAFFID=" $RUNDIR/querytemp.lst > $OUTPUTDIR/$TEMPFILE.TXT
rm -f $RUNDIR/querytemp.lst
#END
CRONTAB里运行代码如下:
...
20 15 * * * sh /swap/autogen/autorequest.sh
--------------------------------------------------------------------------------------
现在问题是,每天它自动生成的文件SMSREQUEST20050713.TXT 内容都为空。
但如果我在命令行运行#sh /swap/autogen/autorequest.sh 却内容是正确的(有记录的)。
为什么用命令行运行和用系统的CRONTAB运行不出结果?
开始我以为是相对路径的问题,
但后来我确定路径全是绝对路径了以后还是运行不出结果来。
谢谢了!
#!/bin/sh
#Set the user/password for oracle connection
ORAUSER=smserver
ORAPWD=fiss
#the directory for the new files
#OUTPUTDIR=/work/fastech/
OUTPUTDIR=/swap/autogen/requestfile
RUNDIR=/swap/autogen
TEMPFILE=SMSREQUEST`date +%Y%m%d`
test -d $OUTPUTDIR || mkdir $OUTPUTDIR
#OUTPUTDIR=$OUTPUTDIR/`date +%Y%m%d`
test -f $OUBPUTDIR/$TEMPFILE.TXT && exit
#create genrequest.sql
echo "#!/bin/sh" > $RUNDIR/sedtmp.sh
echo "sed 's/__TODAY__/`date +%y%m%d`/g' $RUNDIR/genrequest.in > $RUNDIR/genrequest.sql" >> $RUNDIR/sedtmp.sh
sh $RUNDIR/sedtmp.sh
rm $RUNDIR/sedtmp.sh
#Collect records
sqlplus $ORAUSER/$ORAPWD @/swap/autogen/genrequest.sql
rm $RUNDIR/genrequest.sql
#Create output directory
test -d $OUTPUTDIR || mkdir $OUTPUTDIR
#grep PRINT $RUNDIR/querytemp.lst | awk '{OFS="t"}{print $1, $2, $3}' > $OUTPUTDIR/$TEMPFILE.TXT
grep "STAFFID=" $RUNDIR/querytemp.lst > $OUTPUTDIR/$TEMPFILE.TXT
rm -f $RUNDIR/querytemp.lst
#END
CRONTAB里运行代码如下:
...
20 15 * * * sh /swap/autogen/autorequest.sh
--------------------------------------------------------------------------------------
现在问题是,每天它自动生成的文件SMSREQUEST20050713.TXT 内容都为空。
但如果我在命令行运行#sh /swap/autogen/autorequest.sh 却内容是正确的(有记录的)。
为什么用命令行运行和用系统的CRONTAB运行不出结果?
开始我以为是相对路径的问题,
但后来我确定路径全是绝对路径了以后还是运行不出结果来。
谢谢了!
|
在shell中重新设定你的相关环境变量,如PATH等变量。
因为crontab中执行相应的shell命令时,程序执行的环境变量是系统初始时的环境变量;
而不包括你当前用户设定的变量。
你可以试一下,我也碰到过此类问题。
因为crontab中执行相应的shell命令时,程序执行的环境变量是系统初始时的环境变量;
而不包括你当前用户设定的变量。
你可以试一下,我也碰到过此类问题。
|
嗯,嗯,差别的介绍在这里
http://bbs.chinaunix.net/forum/viewtopic.php?t=442596&highlight=wingger
http://bbs.chinaunix.net/forum/viewtopic.php?t=442596&highlight=wingger
|
cron的结果无论成功与否都会发到mail里面的.
所以,cron出错不看mail是不应该的
所以,cron出错不看mail是不应该的
|
请确定文件$RUNDIR/querytemp.lst是否存在