[英]bash unix processbuilder from java not running
我想從我的Java servlet執行一個簡單的Unix命令:我需要做的是對這個文件進行簡單的echo寫入:
echo HELLO > myfile.txt
我在servlet中做的是:
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ServletAutorecovery extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
ProcessBuilder pb = new ProcessBuilder("/usr/bin/bash", "-c", "echo HELLO > ../webapps/test/myfile.txt");
pb.start();
} finally {
out.close();
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
processRequest(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
processRequest(request, response);
}
}
我的問題是:這段代碼部分沒有給我任何錯誤,但沒有任何反應。 在我執行我的servlet之后,文件還沒有被創建,當然,沒有寫入任何內容。
我究竟做錯了什么?
EDIT1:添加了pb命令的完整路徑。
EDIT2: bash
在路徑/usr/bin/bash
,100%肯定它。
EDIT3:添加了SSCCE。
首先,你確定bash肯定在/usr/bin
嗎? 其次,你可能需要告訴ProcessBuilder在運行進程時它應該用作cwd的目錄,否則它會嘗試在servlet容器的當前目錄中創建myfile.txt,通常是你沒有寫的地方訪問。 第三,當你從java運行一個進程時,進程的輸出通過進程對象上的輸入流傳遞回java,它不會直接進入stdout,所以你需要讀取流來查看結果
ProcessBuilder pb = new ProcessBuilder("/usr/bin/bash", "-c", "echo HELLO > myfile.txt");
pb.directory(...);
pb.redirectErrorStream(true);
Process p = pb.start();
IOUtils.copy(p.getInputStream(), System.out);
p.waitFor();
String echo = "echo 'hello' > myfile.txt";
ProcessBuilder pb = new ProcessBuilder("/usr/bin/bash", "-c", echo);
pb.start();
檢查你的錯誤處理; 你可能在某個地方吞下一個異常,因為/usr/bin
沒有bash
,所以你得到一個“找不到文件”的異常(或者類似的)。
請嘗試"/bin/bash"
。 其余的應該工作。
另請注意,部署應用程序后,相對路徑將不起作用,因為它將與運行Java VM的進程相關,而不是您期望,想要或可能使用的進程。 向ServletContext
詢問getRealPath()
的路徑
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.