2016-12-23 143 views
0

我有一个shell脚本,我在主脚本中调用hana.scr脚本。 hana.scr包含下面的代码。脚本没有运行cron。手动执行时工作正常

chmod 777 /data/auto/SLT.out; rm -rf /data/auto/SLT.out; hdbsql -n plhesappr61 -i 00 -u USR -p $#^F#$GGG -o /data/auto/SLT.out "Select sum("ERPACC_RPPCLNT200"."VABD"."NETWR") FROM "ACC_CLNT"."VFKH" inner join "ACC_CLNT"."VNRO" on ("ACC_CLNT"."VNRO"."VBELN"="ACC_CLNT"."VFKH"."VBELN") where FKART in ('ZFP1','ZFP3') and FKDAT = (select ADD_DAYS (TO_DATE (current_date, 'YYYY-MM-DD'), -1) "add_days" from dummy) group by FKDAT"; 

当我手动运行主脚本时,它会调用此脚本,并生成SLT.out文件。 但是,当我在cron中安排它时,主脚本执行的很好,除了这个hana.scr,它似乎并没有执行,因为它甚至不会根据hana.scr中的第二个命令rm删除旧文件。

cron与我手动运行脚本的用户相同。 我读过,如果cron不能运行相同的环境,就会发生这些问题。我试图在作为hana.scr执行之前导入用户的UNIX配置文件,但是没有成功。

下面是它运行它调用从内部hana.scr主脚本cron命令:用于绝对路径..

37 0,2,3,4,5,6 * * * /data/esb/auto/./main.sh R > /data/esb/auto/main.log 

的hana.scr在下面的方式执行:

./hana.scr; 
check6=$? ; 
           if [ $check6 = "1" ] 
             then 
               echo "***********HANA counts were not generated**********" 
           fi 
+0

重定向cron作业的错误,以及对main.log看看会发生什么。 – codeforester

+2

“main.sh”里面有一些基于哪个“hana.scr”启动的条件? “hana.scr”究竟是如何启动的?有没有任何理由说“hana.scr”没有执行,因为“main.sh”失败了,然后“hana.scr”会启动? – czvtools

+0

hana.scr按以下方式启动:./hana.scr; check6 = $? ; if [$ check6 =“1”] then echo“*********** HANA计数未生成**********” fi – user3055262

回答

0

/data/esb/auto/./main.sh之后您的当前目录不会更改为/data/esb/auto/。我认为你从命令行开始main.sh,而你的$PWDhana.scr相同。 从命令行测试它与

cd/
/data/esb/auto/main.sh 

如何解决? 最糟糕的解决办法是改变的crontab行成

37 0,2,3,4,5,6 * * * cd /data/esb/auto; /data/esb/auto/main.sh R > /data/esb/auto/main.log 

这是在crontab的方法,但仍然main.sh从不同的目录启动时失败。
当你调用hana.scr

myscriptdir=/data/esb/auto 
.. 
${myscriptdir}/hana.scr 

当你改变,你需要编辑这些文件和修复设置的文件夹,稍微好一点的是用在main.sh的完整路径。
你可以尝试使用与设置一些配置文件或让main.sh找出在哪个目录是什么:
Getting the source directory of a Bash script from within

相关问题