2010-11-24 137 views
0

我有一個在tomcat6中運行的servlet。我使用下面的代碼來執行命令 ubuntu Runtime.getRuntime()。exec(「/ usr/bin/wine cmd/c some.vbs」); 問題是tomcat6運行程序爲「tomcat6」用戶,上面的java命令爲 。所以上面的命令getErrorStream返回爲 「wine:/home/randeel/.wine不屬於你」 我已經使用用戶「randeel」安裝了「wine」。 有沒有解決這個問題的方法?java - 在linux中執行命令

謝謝, Rana。

+1

如果你這樣做「chmod a + rwx /home/randeel/.wine」它有效嗎? – PeterMmm 2010-11-24 08:53:19

回答

2

是:您必須切換用戶。嘗試

Runtime.getRuntime().exec("sudo -U randeel /usr/bin/wine cmd /c some.vbs"); 

注意sudo會要求輸入密碼,除非您配置它,否則。

另一個更優雅的解決方案是運行一個小型服務器,如randeel,它等待網絡連接。然後運行該命令並通過網絡連接返回輸出。請參閱java.net.Socket的文檔。

+0

嗨,當我執行此命令「sudo -l -U randeel/usr/bin/wine cmd/c some.vbs」時,我得到輸出爲文本「/ usr/bin/wine cmd/c some.vbs」任何解決方案到那個?程序沒有運行。我改變了sudoers,要求沒有passwd。 – rana123 2010-11-24 10:44:12

0

您有2個解決方案。 1.使用chmod a + x爲wine提供適當的執行權限。 2.如果您不想執行#1,則必須運行首先更改用戶然後運行應用程序的命令行。 命令su用戶名 更改當前用戶,但需要輸入密碼。要模擬輸入密碼的終端,您可以使用expect腳本。

然後你可以以不同的用戶運行命令。如果你打算使用這種方式,我建議你寫一個簡短的shell腳本來完成這兩個動作並從java運行這個腳本。

#2更復雜。方式#1似乎更簡單。