2016-11-02 77 views
0

我使用的是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寫入我的文件。

+0

你檢查腳本本身的執行權限? – RealSkeptic

+0

那麼它有我想要的所有必需的權限,因爲如果我以bash的形式啓動它,就像./test.sh他完美地完成了這項工作。 – Sulexa

+0

是的,但這不是用戶運行它,是嗎? Tomcat在另一個用戶下運行。請執行'ls -l。/ test.sh'並將輸出添加到您的問題中。 – RealSkeptic

回答

0

訪問容器文件系統上的文件非常棘手,不鼓勵(imo)。我猜想:你的問題與文件系統本身的權限無關,但是具有Web容器(這裏是:tomcat)的權限。

Accessing linux local file system from java web application

How to access external folder (Web Server)?

+0

嗯實際上sh腳本位於我的webapps文件夾,所以我可以訪問它並啓動它,它真的只是腳本似乎沒有權限,當它從tomcat啓動,當我從bash啓動它作爲根它得到沒有問題要運行 – Sulexa

+0

您正在訪問腳本中的text.txt文件。你是否對目錄也有適當的權限(它需要文件創建權限,即目錄編輯權限),如果它已經存在,在文件上? –

+0

當我從tomcat運行我得到「無法創建test.txt:權限被拒絕」 但是,當我從shell運行腳本我沒有權限問題。 text.txt具有所有必需的權限,我只是嘗試chmod 777它,但它沒有改變總是權限被拒絕。 – Sulexa