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

Run as Other user Option in Linux

案例:

我的情况很简单。我有一台 Linux 服务器机器。在该服务器上,有 2 个用户。一个是root,一个是oracle。现在问题来了,root 用户不知道 sqlldr 命令,这个命令被 [=32= 识别]oracle 仅限用户。

我有一个 batch.sh 文件,在那个文件中我有一个 sqlldr 命令将在数据库中插入记录。当我使用 oracle 用户打开终端时,那个 batch.sh 文件 运行s 根据预期。但是当我使用 root 用户从终端 运行 那个批处理文件时,它说“./batch.sh:第 3 行:sqlldr:找不到命令”。

问题:

现在的问题是,我从 java 代码调用这个 batch.sh 文件,这个 java 进程以 root 启动。我没有办法将这个 java 进程切换到 oracle。但是我期望的是,我可以在使用 batch.sh 文件中执行命令之前切换用户]root 用户.

这是我的 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

任何帮助将不胜感激。

谢谢

可执行的 sqlldr 根本不在根目录的搜索路径中。所以,当你以 root 身份登录时,你将无法执行 sqlldr。

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

您还可以在脚本中使用 root 运行 命令作为该用户 runuser:

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"