【问题标题】:Writing cmd output to a file is not working with Tomcat :(将 cmd 输出写入文件不适用于 Tomcat :(
【发布时间】:2019-12-23 11:01:32
【问题描述】:

我正在使用 java 进程打开 cmd 来运行命令,然后将输出保存到文本文件中。

    ArrayList<String> commands = new ArrayList<>();
    commands.add("cmd.exe");
    commands.add("/c");
    commands.add("cd "+System.getenv("LOGSTASH_PATH")+" && start /B cmd.exe /c  \"logstash --config.test_and_exit -f "+configFileName+"\""+" > testing.txt");              
    ProcessBuilder builder = new ProcessBuilder(commands);
    Process subProcess = builder.start();
    Thread.sleep(50000);
    subProcess.destroy();

当我用 eclipse 尝试这个代码时,这段代码可以工作,但是当我从中生成一个战争并部署在 tomcat 中时,它就不起作用了。可能是什么问题?

如何解决?

【问题讨论】:

  • “它不起作用”是什么意思?你有什么错误吗?还是输出不符合您的预期?
  • 没有错误。它不写入文件
  • 可能会尝试放置一些日志语句并尝试找出它失败的确切行
  • 不会在任何线路上崩溃。只是不写入文件
  • &amp;&amp; 是 shell 用来连接两个进程的东西。您不能将其用作命令的一部分。改为在您的 ProcessBuilder 实例上调用 directory()

标签: java eclipse tomcat process


【解决方案1】:

我怀疑问题可能出在CD 指令上:

  • 检查 LOGSTASH_PATH 环境变量在 Tomcat 进程中是否可用。

  • 如果当前 Tomcat 目录和 LOGSTASH_PATH 属于不同的驱动器,请添加 /d 限定符:

    "cd /d "+System.getenv("LOGSTASH_PATH")+ ...

(正如@nitind 指出的那样,将cd 调用替换为对directory(File) 的Java 调用要好得多)。

【讨论】:

    猜你喜欢
    • 2021-09-25
    • 1970-01-01
    • 2021-05-07
    • 1970-01-01
    • 2016-01-31
    • 2016-07-27
    • 2018-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多