最近在使用 Springboot 执行日志抓取,在使用
String command = "tail -n 50 " + monitor.getErrorLogFilePath() + "|grep ERROR";
Runtime runtime = Runtime.getRuntime();
Process process = runtime.exec(command);
这样的方式,执行错误日志抓取,发现指令,要么不执行,要么报错,要么无法按照描述抓取关键字日志。查了很多方式,最终
变更写法:
Process process = runtime.exec(command);
为
Process process = runtime.exec(new String[]{"sh", "-c", command});
才得以正常运行。通过JDK源码得知,Runtime.exec最终是通过调用ProcessBuilder来真正执行操作的。那么 new String[]{"sh", "-c" , "command"},可能就是,手动指定命令行格式。