簡體   English   中英

通過tomcat運行unix命令

[英]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,它可以從三個地方之一獲得它:

  1. 如果Tomcat是由系統實用程序啟動的(例如/etc/init.dsystemd ),則tomcat將從那里獲取其路徑。

  2. 如果您從終端運行命令啟動了tomcat,那么tomcat可能會從您的環境中獲取它的路徑。

  3. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM