繁体   English   中英

Cron作业:如果从Cron作业运行shell脚本,则if / else条件无法按预期工作

[英]Cron job: if/else conditions does not work as expected, if shell script is run from Cron job

我写了下面的shell脚本:

#!/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语句之前成功地将消息写入日志文件,此后没有任何反应。

任何解决方案如何解决呢?

您可以尝试删除kitchen.sh文件的扩展名,还可以向sh添加完整路径:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM