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

sqlplus does not execute the query if it is called by a ssh external connection

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

mainScript.sh

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

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

的脚本

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

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

DB_SERVER=
USERNAME=
PASSWORD=
EVENT_DATE=
LIST_AUTHORIZED_USERS=
ENVID=
INTERESTED_PARTY=
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.shsqlplus 命令工作正常并且 returns某物。
  2. 如果我通过外部作业调用脚本 mainScript.sh(通过 Jenkins 作业在服务器上打开 ssh 连接),sqlplus return什么都没有,需要 0 秒,这意味着它甚至不会尝试执行自己。

为了调试,我打印了所有变量,查询本身以检查是否设置不正确:一切都设置正确。

确实是命令 sqlplus 不被识别,或者类似这样的.

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

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