如何从linux上的rest服务执行sh文件

问题描述 投票:2回答:1

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

我正在使用:

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

要么

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

p.waitFor();

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

这是一个许可问题吗?我怎么解决这个问题?

java linux shell rest process
1个回答
0
投票

这里只有文件执行权限不够。首先从命令提示符手动运行命令sudo sh /home/mydir/myfile.sh并检查是否工作?你在sodo要求输入密码吗?您执行命令的Web服务帐户是否有权以sudo身份执行?还要检查您的Web应用程序是否具有位置的文件访问权限(意味着它是否可以执行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();
    }
© www.soinside.com 2019 - 2024. All rights reserved.