주어진 입력을 기반으로 파일을 만드는 서블릿을 코딩 해 보았습니다. 해당 텍스트와 함께 파일이 만들어 지지만 파일 777의 사용 권한을 부여 할 수 없습니다. 나중에 ProcessBuilder를 실행할 수 없습니다. ProcessBuilder에서 실행 된 명령에서 파일에 적절한 사용 권한이 필요하기 때문에 명령이 관련이 있다고 생각했으나 chmod를 사용하여 사용 권한을 부여하려고해도 작동하지 않습니다.Java Servlet에서 파일 권한을 부여하고 ProcessBuilder를 실행 중
import java.io.*;
import java.util.Enumeration;
import javax.servlet.*;
import javax.servlet.http.*;
import java.lang.*;
import java.io.*;
import java.util.*;
public class Serv extends HttpServlet
{
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest req,HttpServletResponse res)throws ServletException,IOException
{
String jobId=req.getParameter("jobId");
String jobStatus=req.getParameter("jobStatus");
String displayName=req.getParameter("displayName");
String name=req.getParameter("name");
String description=req.getParameter("description");
String frequency=req.getParameter("frequency");
String lastModifiedAt=req.getParameter("lastModifiedAt");
String createdAt=req.getParameter("createdAt");
String createdBy=req.getParameter("createdBy");
String opPath=req.getParameter("opPath");
String env=req.getParameter("env");
res.setContentType("text/html");
PrintWriter pw=res.getWriter();
pw.println("JobId: \n"+jobId);
pw.println("JobStatus: \n"+jobStatus);
String path = getServletContext().getRealPath("/");
File logfile=new File("/var/lib/tomcat7/webapps/ROOT/log.txt");
logfile.setReadable(true);
logfile.setWritable(true);
logfile.setExecutable(true);
PrintWriter writer = new PrintWriter(path+"log.txt", "UTF-8");
writer.println("Job ID : "+jobId);
writer.println("Job Status : "+jobStatus);
writer.println("Rule Name : "+name);
writer.println("Rule Display Name : "+displayName);
writer.println("Rule Description : "+description);
writer.println("Rule env : "+env);
writer.println("Rule frequency : "+frequency);
writer.println("Rule last modified at : "+lastModifiedAt);
writer.println("Rule created at : "+createdAt);
writer.println("Rule created by : "+createdBy);
writer.println("Notification Path : "+opPath);
writer.close();
pw.close();
try
{
// ProcessBuilder pb1=new ProcessBuilder("sudo","/bin/chmod","777","/var/lib/tomcat7/webapps/ROOT/log.txt");
// pb1.redirectErrorStream(true);
// Process p1=pb1.start();
// InputStreamReader isr1 = new InputStreamReader(p1.getInputStream());
// BufferedReader br1 = new BufferedReader(isr1);
// String lineRead1;
// while ((lineRead1 = br1.readLine()) != null)
// {
// System.out.println(lineRead1);
// }
// p1.waitFor();
ProcessBuilder pb2=new ProcessBuilder("/usr/local/hadoop/bin/hadoop", "fs", "-copyFromLocal", "/var/lib/tomcat7/webapps/ROOT/log.txt",opPath);
pb2.redirectErrorStream(true);
// pb2.directory(new File("/var/lib/tomcat7/webapps/ROOT/"));
Process p2=pb2.start();
InputStreamReader isr2 = new InputStreamReader(p2.getInputStream());
BufferedReader br2 = new BufferedReader(isr2);
String lineRead2;
while ((lineRead2 = br2.readLine()) != null)
{
System.out.println(lineRead2);
}
p2.waitFor();
}
catch(Exception e){}
}
public void doPost(HttpServletRequest req,HttpServletResponse res)throws ServletException,IOException
{
String jobId=req.getParameter("jobId");
String jobStatus=req.getParameter("jobStatus");
String displayName=req.getParameter("displayName");
String name=req.getParameter("name");
String description=req.getParameter("description");
String frequency=req.getParameter("frequency");
String lastModifiedAt=req.getParameter("lastModifiedAt");
String createdAt=req.getParameter("createdAt");
String createdBy=req.getParameter("createdBy");
String env=req.getParameter("env");
String opPath=req.getParameter("opPath");
res.setContentType("text/html");
PrintWriter pw=res.getWriter();
pw.println("JobId: \n"+jobId);
pw.println("JobStatus: \n"+jobStatus);
String path = getServletContext().getRealPath("/");
File logfile=new File("/var/lib/tomcat7/webapps/ROOT/log.txt");
logfile.setReadable(true);
logfile.setWritable(true);
logfile.setExecutable(true);
PrintWriter writer = new PrintWriter(path+"log.txt", "UTF-8");
writer.println("Job ID : "+jobId);
writer.println("Job Status : "+jobStatus);
writer.println("Rule Name : "+name);
writer.println("Rule Display Name : "+displayName);
writer.println("Rule Description : "+description);
writer.println("Rule env : "+env);
writer.println("Rule frequency : "+frequency);
writer.println("Rule last modified at : "+lastModifiedAt);
writer.println("Rule created at : "+createdAt);
writer.println("Rule created by : "+createdBy);
writer.println("Notification Path : "+opPath);
writer.close();
pw.close();
try
{
// ProcessBuilder pb1=new ProcessBuilder("sudo", "/bin/chmod","777", "-R", "/var/lib/tomcat7/webapps/ROOT/log.txt");
// pb1.redirectErrorStream(true);
// Process p1=pb1.start();
// InputStreamReader isr1 = new InputStreamReader(p1.getInputStream());
// BufferedReader br1 = new BufferedReader(isr1);
// String lineRead1;
// while ((lineRead1 = br1.readLine()) != null)
// {
// System.out.println(lineRead1);
// }
// p1.waitFor();
ProcessBuilder pb2=new ProcessBuilder("/usr/local/hadoop/bin/hadoop", "fs", "-copyFromLocal", "/var/lib/tomcat7/webapps/ROOT/log.txt",opPath);
pb2.redirectErrorStream(true);
// pb2.directory(new File("/var/lib/tomcat7/webapps/ROOT/"));
Process p2=pb2.start();
InputStreamReader isr2 = new InputStreamReader(p2.getInputStream());
BufferedReader br2 = new BufferedReader(isr2);
String lineRead2;
while ((lineRead2 = br2.readLine()) != null)
{
System.out.println(lineRead2);
}
p2.waitFor();
}
catch(Exception e){}
}
}
누구든지 도움이된다면 정말 좋을 것입니다. 편의를 위해
: 파일 권한
File logfile=new File("/var/lib/tomcat7/webapps/ROOT/log.txt");
logfile.setReadable(true);
logfile.setWritable(true);
logfile.setExecutable(true);
ProcessBuilder를 : 실수로 이전 misguiding 소개
ProcessBuilder pb2=new ProcessBuilder("/usr/local/hadoop/bin/hadoop", "fs", "-copyFromLocal", "/var/lib/tomcat7/webapps/ROOT/log.txt",opPath);
pb2.redirectErrorStream(true);
// pb2.directory(new File("/var/lib/tomcat7/webapps/ROOT/"));
Process p2=pb2.start();
InputStreamReader isr2 = new InputStreamReader(p2.getInputStream());
BufferedReader br2 = new BufferedReader(isr2);
String lineRead2;
while ((lineRead2 = br2.readLine()) != null)
{
System.out.println(lineRead2);
}
p2.waitFor();
가능성이 PHP에서 마지막으로 한 중복 것입니다 - http://stackoverflow.com/questions/6233541/java-set-file-permissions-to-777-while-creating-a -file-object – sprabhakaran
@hellospk 그러나 Servlets에서는 작동하지 않습니다. String path = getServletContext(). getRealPath ("/");와 같은 서블릿의 경우에해야 할 일이 있습니까? 그리고 log.txt 앞에 경로를 추가하기 때문에 log.txt 파일에 쓰기 위해 필요하기 때문에. 그러나 권한을 설정하는 데 사용되는 경우에는 작동하지 않습니다. –
jdk-7이 문제를 해결할 수 있습니다 http://www.journaldev.com/855/how-to-set-file-permissions-in-java-easily-using-java-7-posixfilepermission – sprabhakaran