java - 如何在 linux 上从 rest 服务执行 sh 文件

标签 java linux shell rest process

我在 linux 机器上有一个用 java 编写的休息服务。

我正在使用:

p = Runtime.getRuntime().exec(cmmnd);

ProcessBuilder pb = new ProcessBuilder(cmmnd).inheritIO();
p = pb.start();

p.waitFor();

我可以执行像mkdir, touch这样的命令... 但是当我尝试运行 sh 文件时没有任何反应(例如:sudo sh/home/mydir/myfile.sh)

这是权限问题吗?我该如何解决?

最佳答案

这里只有文件执行权限是不够的。首先从命令提示符手动运行命令 sudo sh/home/mydir/myfile.sh 并检查是否有效?你 sodo 要求输入密码吗?您正在执行命令的 Web 服务帐户是否有权以 sudo 身份执行?还要检查您的网络应用程序是否具有对位置的文件访问权限(意味着它可以执行 cd/home/mydir/) /home/mydir/myfile.sh 或不?

还在您的代码中读取输出并检查实际错误是什么?

p.getOutputStream();

也试试:-

    ProcessBuilder pb = new ProcessBuilder("sudo sh /home/mydir/myfile.sh");
    pb.redirectOutput(new File("/new_path/out.txt"));
    Process p = pb.start();
    try {
        p.waitFor();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

关于java - 如何在 linux 上从 rest 服务执行 sh 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49111062/

相关文章:

java - 如何使用 Mockito 实现复合对象

java - Hibernate 中的正则表达式查询

java - tomcat jar java 仅适用于 8080

windows - 线程 ID 与线程句柄

linux - Linux 下带 dotnet 核心的 LDAP

python - 有没有办法在Linux中通过Python启用tor作为系统代理设置

shell - nginx:使用环境变量

linux - 为什么 bash 将我的命令 'mysql*' 更改为 'mysql.sql' ?

shell - Ansible 任务从文件中删除数据

java - 如何在 application.properties 文件中的 Spring Boot 应用程序中配置 HikariCP?