2015-12-14 58 views
1

我想切換用戶,然後在新用戶下啓動一個命令。 其實我的代碼是在Process Builder中切換用戶

String[] commandToRun2 = {"su","-","jboss", "./jboss-cli.sh -c :shutdown(restart=true)"}; 
ProcessBuilder pb = new ProcessBuilder(commandToRun2); 
pb.directory(new File("/home/jboss/soft/jboss-as-7.1.1.Final/bin/")); 
Process p = pb.start(); 

但我不能讓它工作。

+0

它究竟如何不起作用?日誌中是否有例外情況? – VasyaNovikov

+0

沒有例外,它只是正常結束進程,但沒有正確執行命令。在root下使用相同的命令(沒有su)它工作正常。 – Jebus

+0

你是否手動測試過你的'su'命令?您是否在測試'su'時從同一用戶啓動您的Java應用程序? – VasyaNovikov

回答

0

根據this SuperUser answer,您致電su看起來不太正確。

從這個問題中,su司令部應具備的形式

su [username] -c "[command]" 

所以,儘量不要使用以下:

String[] commandToRun2 = {"su", "jboss", "-c", "./jboss-cli.sh -c :shutdown(restart=true)"}; 

順便說一下,它可能有助於記錄寫入到進程的任何輸出標準輸出和標準錯誤。如果出現錯誤,您將能夠看到錯誤是什麼,如果進程生成大量輸出,則讀取輸出將阻止輸出緩衝區填充和阻止進程。 This answer演示如何做到這一點。

+0

如何通過java代碼爲用戶提供密碼? – HyperioN