如果通过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
执行查询。
问题如下:
- 如果我通过命令行 (PuTTy / KiTTy) 调用脚本 mainScript.sh,
sqlplus
命令工作正常并且 returns某物。
- 如果我通过外部作业调用脚本 mainScript.sh(通过 Jenkins 作业在服务器上打开
ssh
连接),sqlplus
return什么都没有,需要 0 秒,这意味着它甚至不会尝试执行自己。
为了调试,我打印了所有变量,查询本身以检查是否设置不正确:一切都设置正确。
确实是命令 sqlplus
不被识别,或者类似这样的.
请问您知道我该如何调试吗?我应该在哪里看问题?
这里你需要考虑一些事情。当您是 运行 脚本时,您从哪个目录位置执行脚本?当您从外部应用程序执行脚本时,它从哪个目录位置执行脚本。最好使用脚本的完整路径,如 /path/to/the/script/script.sh
或使用 cd /path/to/the/script/
命令先转到脚本目录并执行脚本。还要检查您的应用程序的执行权限。作为用户,您可能有权执行脚本或 sql 命令,但您的应用程序没有该权限。检查您的应用程序的用户 ID 并将其添加到正确的组中。
我在 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
执行查询。
问题如下:
- 如果我通过命令行 (PuTTy / KiTTy) 调用脚本 mainScript.sh,
sqlplus
命令工作正常并且 returns某物。 - 如果我通过外部作业调用脚本 mainScript.sh(通过 Jenkins 作业在服务器上打开
ssh
连接),sqlplus
return什么都没有,需要 0 秒,这意味着它甚至不会尝试执行自己。
为了调试,我打印了所有变量,查询本身以检查是否设置不正确:一切都设置正确。
确实是命令 sqlplus
不被识别,或者类似这样的.
请问您知道我该如何调试吗?我应该在哪里看问题?
这里你需要考虑一些事情。当您是 运行 脚本时,您从哪个目录位置执行脚本?当您从外部应用程序执行脚本时,它从哪个目录位置执行脚本。最好使用脚本的完整路径,如 /path/to/the/script/script.sh
或使用 cd /path/to/the/script/
命令先转到脚本目录并执行脚本。还要检查您的应用程序的执行权限。作为用户,您可能有权执行脚本或 sql 命令,但您的应用程序没有该权限。检查您的应用程序的用户 ID 并将其添加到正确的组中。