通过tomcat运行unix命令

时间:2014-05-15 08:45:10

标签: java unix tomcat

我正在运行包含以下命令的脚本

#!/bin/bash ifconfig eth0 | grep -o -E '([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}'

我有一个java包装器,用于使用Runtime.exec(...)执行此脚本。运行这个java代码一直很好。

问题是当在tomcat下运行这个java方法时,它给我一个错误 script.sh: line 3: ifconfig: command not found
重新启动tomcat服务脚本运行一段时间后,此问题再次持续存在。

我如何解决这个问题?

编辑: Java代码:

String executableScript = <path to script>/script.sh;
String line;
String output;
String[] command = {executableScript};
Process process = Runtime.getRuntime().exec(command);
BufferedReader input = new BufferedReader(new InputStreamReader(process.getInputStream()));
while ((line = input.readLine()) != null) {
    output.append(line);
}
process.waitFor();
input.close();

2 个答案:

答案 0 :(得分:1)

在脚本中使用ifconfig的完整路径,通常是:

/sbin/ifconfig

从tomcat服务运行时,它将继承服务的运行时环境,例如$ PATH。

答案 1 :(得分:1)

错误script.sh: line 3: ifconfig: command not found表示shell(由tomcat启动以运行命令)正在搜索其PATH以找到ifconfig程序,并且它找不到它。 shell的PATH变量的值来自Tomcat,它可以从三个地方之一获得它:

  1. 如果Tomcat是由系统实用程序(例如/etc/init.dsystemd)启动的,则tomcat将从那里获取其路径。

  2. 如果您从终端运行命令启动了tomcat,那么tomcat可能会从您的环境中获取它的路径。

  3. Tomcat(或在tomcat中运行的任何java类)可能会在启动后更改其PATH。

  4. 如果您在系统实用程序启动tomcat时发现脚本始终失败,并且从终端启动tomcat时总是正常工作,然后问题是#1。 tomcat从系统获取的PATH不包含包含ifconfig的目录。

    如果您在启动tomcat后发现该脚本工作了一段时间,然后在重新启动tomcat之前它开始失败,那么tomcat中的某些内容正在改变tomcat的PATH环境变量。 Tomcat本身可能不包含任何代码来执行此操作,因此您应该查看已在tomcat中部署的应用程序。