如果ssh外部连接调用它,则sqlplus不执行查询

时间:2018-03-09 10:01:59

标签: bash shell jenkins-plugins sqlplus

我有一个脚本位于Unix服务器中,如下所示:

mainScript.sh

#some stuff here
emailScript.sh $PARAM_1 $PARAM_2
#some other stuff here

如您所见,mainScript.sh正在调用另一个名为 emailScript.sh 的脚本。

emailScript.sh 应该通过sqlplus执行查询,然后解析结果并通过电子邮件返回(如果有的话)。

emailScript.sh 中代码的有趣部分是:

DB_SERVER=$1
USERNAME=$2
PASSWORD=$3
EVENT_DATE=$4
LIST_AUTHORIZED_USERS=$5
ENVID=$6
INTERESTED_PARTY=$7
RAW_LIST=$(echo "select distinct M_OS_USER from MX_USER_CONNECTION_DBF where M_EVENT_DATE >= to_date('$EVENT_DATE','DD-MM-YYYY') and M_OS_USER is not null and M_OS_USER not in $LIST_AUTHORIZED_USERS;" | sqlplus -s $USERNAME/$PASSWORD@$DB_SERVER)

如您所见,我所做的只是创建使用RAW_LIST执行查询的变量sqlplus

问题如下:

  1. 如果我通过命令行(PuTTy / KiTTy)调用脚本 mainScript.sh sqlplus命令可以正常工作并返回一些内容。
  2. 如果我通过外部作业(通过Jenkins作业在服务器上打开ssh连接)调用脚本 mainScript.sh sqlplus将不返回任何内容0秒,这意味着它甚至没有尝试自己执行。
  3. 为了调试,我打印了所有变量,查询本身,以检查是否有正确设置的东西:一切都正确设置。

    似乎无法识别命令 sqlplus ,或类似

    请问您如何调试此问题?我应该在哪里看问题?

1 个答案:

答案 0 :(得分:1)

你需要在这里考虑一些事情。在运行脚本时,从哪个目录位置执行脚本?当您从外部应用程序执行脚本时,它正在执行脚本的目录位置。更好地使用脚本的完整路径,如/path/to/the/script/script.sh或使用cd /path/to/the/script/命令首先转到脚本目录并执行脚本。还要检查应用程序的执行权限。您作为用户可能有权执行脚本或sql命令,但您的应用程序没有该权限。检查应用程序的用户ID,并将其添加到正确的组中。