脚本没有通过cron运行。手动执行时工作正常

时间:2016-12-23 16:11:28

标签: unix cron crontab aix hana

我有一个shell脚本,我在主脚本中调用hana.scr脚本。 hana.scr包含以下代码。

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配置文件,但是没有成功。

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

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

1 个答案:

答案 0 :(得分:1)

/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

时,使用main.sh中的完整路径会好一点
myscriptdir=/data/esb/auto
..
${myscriptdir}/hana.scr

更改文件夹时,需要编辑文件并修复设置 您可以尝试使用某些配置文件和设置,或让main.sh确定它在哪个目录中:
Getting the source directory of a Bash script from within