Java サーブレットから単純な Unix コマンドを実行したいのですが、次のようなファイルへの単純なエコー書き込みが必要です。
echo HELLO > myfile.txt
私がサーブレットでやっていることは次のとおりです。
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);
}
}
私の問題は次のとおりです。このコード セクションでエラーが発生することはありませんが、何も起こりません。サーブレットを実行した後、ファイルは作成されておらず、もちろん何も書き込まれていません。
私は何を間違っていますか?
EDIT1: pb コマンドへのフル パスを追加しました。
EDIT2:bash
パス/usr/bin/bash
にあり、100% 確実です。
EDIT3: SSCCE を追加しました。