[英]Running unix command through 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();
在腳本中使用ifconfig的完整路徑,通常是:
/sbin/ifconfig
從tomcat服務運行時,它將繼承服務的運行時環境,例如$ PATH。
錯誤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中部署的應用程序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.