我使用的是Tomcat7,我試圖從tomcat啓動sh腳本。我的sh腳本需要創建一個新文件並寫入內容。如果我啓動我的腳本,比如./test.sh,它可以很好地工作,但是如果我使用tomcat啓動該腳本,我會在腳本執行過程中遇到許可被拒絕的錯誤,沒有寫權限。 這是我的Java代碼:Tomcat sh腳本權限
String[] fixCmd = new String[] { path };
Process start = Runtime.getRuntime().exec(fixCmd);
// monitor standard error to find out what's wrong
BufferedReader r = new BufferedReader(new InputStreamReader(start.getErrorStream()));
String line = null;
while ((line = r.readLine()) != null) {
System.out.println(line);
}
和我的shell:
echo test >> test.txt
我試圖使用的ProcessBuilder但它並沒有工作太。
我試圖改變文件夾的權限與我找到的所有解決方案,沒有任何工作。當exec Tomcat過去以root身份啓動腳本時,他擁有所需的所有權限。我將文件夾的所有權限授予tomcat7用戶,以防萬一,但沒有任何變化。我有一些其他的Java腳本在服務器上創建和寫入文件,所以我已經設法改變讓tomcat寫東西的權利,它的工作,所以我真的不知道腳本的問題是什麼。
任何想法?
編輯1: 的ls -l ./test.sh
輸出做到這一點:
-rwxr-xr-x 1 tomcat7 tomcat7 165 nov. 2 16:12 ./test.sh
我超級用戶身份登錄,我的tomcat紅色被認爲是根太。
編輯2解決問題: 一位專家解釋說我的問題是一個安全問題,因爲tomcat是一個web服務器,這是一個安全性,不讓它有sh腳本的寫權限。所以我改變了我的問題的方法,我會閱讀在Java中的sh腳本輸出,並從jave寫入我的文件。
你檢查腳本本身的執行權限? – RealSkeptic
那麼它有我想要的所有必需的權限,因爲如果我以bash的形式啓動它,就像./test.sh他完美地完成了這項工作。 – Sulexa
是的,但這不是用戶運行它,是嗎? Tomcat在另一個用戶下運行。請執行'ls -l。/ test.sh'並將輸出添加到您的問題中。 – RealSkeptic