我正在运行包含以下命令的脚本
#!/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();
答案 0 :(得分:1)
在脚本中使用ifconfig的完整路径,通常是:
/sbin/ifconfig
从tomcat服务运行时,它将继承服务的运行时环境,例如$ PATH。
答案 1 :(得分:1)
错误script.sh: line 3: ifconfig: command not found
表示shell(由tomcat启动以运行命令)正在搜索其PATH以找到ifconfig
程序,并且它找不到它。 shell的PATH变量的值来自Tomcat,它可以从三个地方之一获得它:
如果Tomcat是由系统实用程序(例如/etc/init.d
或systemd
)启动的,则tomcat将从那里获取其路径。
如果您从终端运行命令启动了tomcat,那么tomcat可能会从您的环境中获取它的路径。
Tomcat(或在tomcat中运行的任何java类)可能会在启动后更改其PATH。
如果您在系统实用程序启动tomcat时发现脚本始终失败,并且从终端启动tomcat时总是正常工作,然后问题是#1。 tomcat从系统获取的PATH不包含包含ifconfig
的目录。
如果您在启动tomcat后发现该脚本工作了一段时间,然后在重新启动tomcat之前它开始失败,那么tomcat中的某些内容正在改变tomcat的PATH环境变量。 Tomcat本身可能不包含任何代码来执行此操作,因此您应该查看已在tomcat中部署的应用程序。