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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从linux上的rest服务执行sh文件相关的知识,希望对你有一定的参考价值。

我在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

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

答案

这里只有文件执行权限不够。首先从命令提示符手动运行命令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();
    }

以上是关于如何从linux上的rest服务执行sh文件的主要内容,如果未能解决你的问题,请参考以下文章

如何从 .sh 可执行文件执行远程 Python 文件?

linux怎么远程执行另一台linux机器上的shell文件?

linux arm 运行 shell .sh 脚本文件报错:/bin/bash^M: bad interpreter: No such file or directory(dos2unix )(代码片

使用html按钮执行sh文件单击[重复]

Shell 脚本文件(.sh)不能从 Linux 上的 c# 核心运行

宁静的 DDS 执行