bash - sudo -u(用户)cmd 在 bash 脚本中不起作用

标签 bash shell tomcat sudo

我正在使用 bash 脚本。

此 bash 脚本必须使用 sudo -u (B) cmd 运行命令。

我使用用户 A 执行此脚本。

在我的 /etc/sudoers 中,我声明了所有命令。

当我使用终端执行它时,一切都很好。

当我在 tomcat 服务器中使用 java 程序执行它时,我出错了。

我如何从我的 java 程序执行我的脚本:

command = "/path/my-script.sh arg1"

 private String executeCommand(String command) {

        StringBuffer output = new StringBuffer();

        Process p;
        try {
            p = Runtime.getRuntime().exec(command);
            p.waitFor();
            BufferedReader reader =
                    new BufferedReader(new InputStreamReader(p.getInputStream()));

            String line = "";
            while ((line = reader.readLine())!= null) {
                output.append(line + "\n");
            }

        } catch (Exception e) {
            e.printStackTrace();
        }

        return output.toString();

 }

在这两种情况下(终端或 Java 程序)我都执行这些命令:

user=$(whoami)
echo "[INFO]: user = $user"

结果:[INFO]: user = A

mkdircmd=$(sudo -u B mkdir -p $project_path)
return_mkdircmd=$?

echo "[INFO]: mkdircmd: $mkdircmd / return mkdircmd: $return_mkdircmd"

cpcmd=$(sudo -u B cp $file_path $project_path)
return_cpcmd=$?


echo "[INFO]: cpcmd: $cpcmd / return cpcmd: $return_cpcmd"

结果:

Tomcat服务器执行脚本

[INFO]: mkdircmd:  / return mkdircmd: 1
[INFO]: cpcmd:  / return cpcmd: 1

使用终端执行脚本 (./myscript)

[INFO]: mkdircmd:  / return mkdircmd: 0
[INFO]: cpcmd:  / return cpcmd: 0

有人可以帮我找出我的问题在哪里吗?

谢谢

最佳答案

要调试问题,请将用户更改为 tomcat(假设 tomcat 正在使用 tomcat 用户运行)

sudo su - tomcat

执行命令:

sudo -u B (cmd)

调试任何错误。您可能必须将 /etc/passwd 中的 /sbin/nologin 更新为 /bin/bashsu 使用 tomcat。

关于bash - sudo -u(用户)cmd 在 bash 脚本中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40404050/

相关文章:

java - Apache/Tomcat站点嵌套

python-2.7 - requests.delete 在 Artifactory 上引发 GET 而不是 DELETE

bash - shell :在 ubuntu 12.04 上安装 gawk

linux - awk 输出到变量

bash - 为什么 $@ 与 bash 中的大多数其他变量不同?

linux - 如何使用 sed 删除文件的最后 n 行

linux - 是否可以使用 xdotool 输入 Web 控制台命令?

tomcat - 在 VPS 上使用 Let's Encrypt 证书运行 spring boot 时出现问题

windows - 在 Windows 上运行 bash 脚本时,Git Bash 与 Slash '/' 混淆

android - android-sdk 工具上标签不匹配太多,无法构建 docker 镜像