在Linux中作为其他用户选项运行

时间:2016-11-18 11:44:51

标签: java linux bash sql-loader

案例:

我的情况很简单。我有一台Linux服务器机器。在该服务器上,有2个用户。一个是 root ,另一个是 oracle 。现在就是这样,root用户不知道 sqlldr 命令,此命令被 oracle 识别仅限用户。

我有 batch.sh 文件,在该文件中我有 sqlldr 命令,该命令将插入记录在数据库中。当我使用 oracle 用户打开终端时, batch.sh 文件会根据预期运行。但是当我使用 root 用户从终端运行该批处理文件时,它会显示" ./ batch.sh:line 3:sqlldr :找不到命令 "。

问题:

现在问题是,我从java代码调用这个batch.sh文件,这个java进程以 root 启动。我无法将此java进程切换到oracle。但是,我期待的是,我可以在 文件中使用 root < / strong>用户。

这是我的batch.sh文件内容。

#!/bin/bash

sqlldr username/password@sid control='/path/toFile/control.txt' log='/path/toFile/Results.log' bad='/path/toFile/BadFile.bad' ERRORS=5000

exit 0

我期待这样的事情。

#!/bin/bash

### Start - Switch user here from root to oracle so that it recognize the following command

sqlldr username/password@sid control='/path/toFile/control.txt' log='/path/toFile/Results.log' bad='/path/toFile/BadFile.bad' ERRORS=5000

### End - Undo the switch that we made above

exit 0

任何帮助都将受到高度赞赏。

由于

2 个答案:

答案 0 :(得分:1)

可执行文件sqlldr根本不在根的搜索路径中。因此,当您以root用户身份登录时,您将无法执行sqlldr。

你需要做的是找出sqlldr所在的位置(例如/ folderof / yourtool)并执行A或B: A)确保将其包含在root登录时加载的根路径中,使用根据您的Linux发行版的方法 要么 B)将行PATH=$PATH:/folderof/yourtool添加到shell脚本或java环境中以动态添加PATH。

答案 1 :(得分:1)

您也可以使用runuser

在您的脚本中以root用户身份运行该命令
runuser -l oracle -c "sqlldr username/password@sid control='/path/toFile/control.txt' log='/path/toFile/Results.log' bad='/path/toFile/BadFile.bad' ERRORS=5000"