java - 从java运行linux命令,错误500,无法运行程序没有那个文件或目录

标签 java linux shell

<分区>

我正在尝试从 Java 发送带有 Linux 命令的电子邮件,我承认我对 Linux 了解不多,但我想我已经尝试了所有方法,但我真的很困惑,如果有人能为它提供一些启示会很棒

我将应用程序导出到 war 文件并将其上传到 linux 服务器 (CentOS)

所以这就是我正在做的:我正在使用浏览器从 servlet 触发代码

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    String cmd = "mail -s \"Test Email\" my@email.com < /usr/share/apache-tomcat-7.0.42/webapps/slots_dashboard/alert_mail.txt";

    //String cmd = "whoami"; //returns tomcat

    ProcessBuilder pb = new ProcessBuilder(cmd);
    Process proc = pb.start();

    BufferedReader stdInput = new BufferedReader(new InputStreamReader(proc.getInputStream()));

    BufferedReader stdError = new BufferedReader(new InputStreamReader(proc.getErrorStream()));

    String s = null;

    while ((s = stdInput.readLine()) != null) {
        resp.getWriter().println(s);
    }

    while ((s = stdError.readLine()) != null) {
        resp.getWriter().println(s);
    }
}

我得到的错误是: HTTP 状态 500 - 无法运行程序“mail -s “测试电子邮件”my@email.com

如果我将命令更改为 whoami 我在响应中得到 tomcat,我什至去了服务器计算机并从那里尝试了命令并且没有问题。伙计们,请帮忙:(

最佳答案

不知道是不是这个原因,但是我看到的关于如何使用 ProcessBuilder 的所有示例都使用字符串列表作为构造函数的参数(每个参数一个字符串),而不是整个命令的一个长字符串。 也许值得尝试这样的事情:

ProcessBuilder pb = new ProcessBuilder("mail", "-s", "\"Test Email\"", "my@email.com", "<", "/usr/share/apache-tomcat-7.0.42/webapps/slots_dashboard/alert_mail.txt");

显然,我是在黑暗中拍摄的。但值得一试。

关于java - 从java运行linux命令,错误500,无法运行程序没有那个文件或目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27766508/

相关文章:

java - 如何使用复选框将表格单元格从可编辑更改为不可编辑

java - 带参数的并发 JUnit 测试

java - 如何使我的java代码能够与许多数据库和许多操作系统一起工作?

c - Linux 设备驱动读写函数问题

c - 编译 gcc-2.7.2.3 时出错

bash - 如何在 Bash 中将变量设置为命令的输出?

java - 如何在安装前阅读 bundle 的 list ?

javascript - 在 AJAX 调用和串口消息后将数据返回到网页。

linux - 如何在不离开当前 shell 的情况下在当前 shell 中间脚本中设置 sudo?

linux - Bash - 获取命令的输出