2016-12-23 140 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

相關問題