2015-02-09 56 views
0

我是编写Unix shell脚本的新手。我编写了一个包含Oracle数据库sql代码的脚本。正如你在下面看到的,它会在文本文件中写出大量的sql代码,并且我想通过邮件发送这些输出。 当我手动运行时,它工作得很好。但是当在crontab上它不会按照我的意愿去做。 Sql代码工作得很好,文本文件被更新,它发送邮件但邮件中的值为空。 我读了一些其他问题,我写了所有的路径,但我找不到问题。我希望你能找到解决办法。 谢谢你,最好的问候当我手动运行脚本时脚本工作的很好,但是在crontab上出现了一些问题

#!/usr/bin/ksh 
./home/partner/.profile 
NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P9 
ORACLE_BASE=/oracle 
ORACLE_SID=---------------- 
ORACLE_HOME=------------- 
USER=------------ 
PASSWD=-------------- 
SCRIPTPATH=/home/path-to/scripts/ 
spoolfile=$SCRIPTPATH/textfile1.txt 
spoolfile2=$SCRIPTPATH/textfile2.txt 
export NLS_LANG ORACLE_BASE ORACLE_SID ORACLE_HOME 

$ORACLE_HOME/bin/sqlplus $USER/$PASSWD<<EOF 
@$SCRIPTPATH/code1.sql $spoolfile 
exit; 
EOF 

$ORACLE_HOME/bin/sqlplus $USER/$PASSWD<<EOF 
@$SCRIPTPATH/code2.sql $spoolfile2 
exit; 
EOF 

value1=`/usr/bin/cat textfile1.txt` 
value2=`/usr/bin/cat textfile2.txt` 

if [[ -s $spoolfile ]] ; then 
echo "mail1 "$value1 "text "$value2 | mailx -s "subject" [email protected] 
else 
echo "mail2" | mailx -s "subject" [email protected] 
fi 
+0

你可以编辑你的crontab发送输出到日志查找'... >> log.txt'并上传那个? – mmmmmpie 2015-02-09 20:58:34

+0

如果您作为cron的用户运行,它可能也是一个权限问题。 – MiltoxBeyond 2015-02-09 20:59:41

+0

执行crontab时,常见问题来自设置环境变量。确保在由crontab调用的脚本中设置环境变量。 – Cyryl1972 2015-02-11 10:20:01

回答

3

你有

spoolfile=$SCRIPTPATH/textfile1.txt 
spoolfile2=$SCRIPTPATH/textfile2.txt 

再后来

value1=`/usr/bin/cat textfile1.txt` 
value2=`/usr/bin/cat textfile2.txt` 

貌似TEXTFILES被保存在一个地方,从另一个读取。

+0

我只写完整路径,它的工作原理: – omega 2015-02-09 21:12:54

相关问题