2011-12-22 94 views
0

我寫了下面的shell腳本:cron作業:如果如預期,如果shell腳本由cron作業運行/其他條件不工作

#!/bin/bash 

MAIL=/usr/mail/${LOGNAME:?} 

. /installations/etl_scripts/etl_job.properties 

JOB_LOG_FILE_PATH=$JOB_LOG_FILE_PATH 
export JOB_LOG_FILE_PATH 

JOB_LOG_FILE_NAME=$JOB_LOG_FILE_NAME 
export JOB_LOG_FILE_NAME 

JAVA_HOME=$JAVA_HOME 
export JAVA_HOME 

CATALINA_HOME=$CATALINA_HOME 
export CATALINA_HOME 

PENTAHO_HOME=$PENTAHO_HOME 
export PENTAHO_HOME 

PENTAHO_JAVA_HOME=$PENTAHO_JAVA_HOME 
export PENTAHO_JAVA_HOME 

ETL_JOB_HOME=$ETL_JOB_HOME 
export ETL_JOB_HOME 

ETL_SCRIPTS_HOME=$ETL_SCRIPTS_HOME 
export ETL_SCRIPTS_HOME 

PATH=$PATH 
export PATH 

# Virre ETL transformation job execution 
echo $ETL_JOB_ENABLED >> /tmp/templog.log 
date +"%D %r `echo Scheduled Pentaho ETL job is starting...`" >> $JOB_LOG_FILE_PATH/$JOB_LOG_FILE_NAME 
if [ $ETL_JOB_ENABLED = 'Yes' ]; then 
    sh $PENTAHO_HOME/kitchen.sh -file $ETL_JOB_HOME/sync_job.kjb >> $JOB_LOG_FILE_PATH/$JOB_LOG_FILE_NAME 
else 
    echo "Pentaho ETL job is dissabled. Please enable it in etl_job.properties by setting ETL_JOB_ENABLED property to yes" >> $JOB_LOG_FILE_PATH/$JOB_LOG_FILE_NAME 
fi 
date +"%D %r `echo Completed`" >> $JOB_LOG_FILE_PATH/$JOB_LOG_FILE_NAME 
echo ----------------------------------------------------------------- >> $JOB_LOG_FILE_PATH/$JOB_LOG_FILE_NAME 

當我從控制檯運行它,if/else語句工作如預期。但是,當它從計劃的Cron作業中運行時,它會在if語句之前或之前的某處掛起:在if語句寫入日誌文件之前成功寫入消息,之後沒有任何反應。

任何解決方案如何解決這個問題?

+0

是什麼在'/ tmp目錄/ templog.log'當您通過cron運行呢?另外,cron運行後'$ JOB_LOG_FILE_PATH/$ JOB_LOG_FILE_NAME'的內容是什麼? – beny23 2011-12-22 11:40:03

回答

1

你可以嘗試刪除擴展kitchen.sh文件,也增加了SH完整路徑:

/bin/sh $PENTAHO_HOME/kitchen -file $ETL_JOB_HOME/sync_job.kjb >> $JOB_LOG_FILE_PATH/$JOB_LOG_FILE_NAME 
+0

謝謝。如果完整路徑設置爲.sh,則工作(/ bin/sh ..) – adrift 2011-12-22 12:34:24