2014-07-22 4 views
0

주어진 입력을 기반으로 파일을 만드는 서블릿을 코딩 해 보았습니다. 해당 텍스트와 함께 파일이 만들어 지지만 파일 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(); 
+0

가능성이 PHP에서 마지막으로 한 중복 것입니다 - http://stackoverflow.com/questions/6233541/java-set-file-permissions-to-777-while-creating-a -file-object – sprabhakaran

+0

@hellospk 그러나 Servlets에서는 작동하지 않습니다. String path = getServletContext(). getRealPath ("/");와 같은 서블릿의 경우에해야 할 일이 있습니까? 그리고 log.txt 앞에 경로를 추가하기 때문에 log.txt 파일에 쓰기 위해 필요하기 때문에. 그러나 권한을 설정하는 데 사용되는 경우에는 작동하지 않습니다. –

+1

jdk-7이 문제를 해결할 수 있습니다 http://www.journaldev.com/855/how-to-set-file-permissions-in-java-easily-using-java-7-posixfilepermission – sprabhakaran

답변

0

죄송합니다. 문제는 실제로 hadoop의 스토리지 시스템 (hdfs)에 거짓말을했고 분명히 바람둥이 나 서블릿에 문제가 있다고 생각했습니다. 나는 이것을 발견하자마자 질문을 삭제할 생각을했지만, 나는 2 일 동안 아무 것도 찾을 수 없었기 때문에 다른 사람에게 도움이 될 것이라고 생각했다.

나는 마침내 나를 도왔습니다. Permission denied at hdfs.

-copyFromLocal 또는 -put에는 내가 가정하고 hdfs-site.xml에 다음을 추가 한 다음 작동시키는 권한이 있어야합니다.

<property> 
    <name>dfs.permissions</name> 
    <value>false</value> 
    </property> 

또한 PHP에서 동일하게 시도했지만 jsp 나 서블릿보다 훨씬 덜 혼란 스럽습니다.

내가

<?php 
    if($_GET["jobId"] || $_GET["jobStatus"]) 
    { 
    echo "Job Id ". $_GET['jobId']. "<br />"; 
    echo "Job Status ". $_GET['jobStatus']. ""; 
    } 
    $jobId=$_GET["jobId"]; 
    $jobStatus=$_GET["jobStatus"]; 
    $displayName=$_GET["displayName"]; 
    $name=$_GET["name"]; 
    $description=$_GET["description"]; 
    $frequency=$_GET["frequestuency"]; 
    $lastModifiedAt=$_GET["lastModifiedAt"]; 
    $createdAt=$_GET["createdAt"];  
    $createdBy=$_GET["createdBy"];   
    $opPath=$_GET["opPath"];  
    $env=$_GET["env"]; 
    $file = fopen("log.txt","w"); 
    echo fwrite($file,"Job ID : ".$jobId."\n"."Job Status : ".$jobStatus."\n"."Display Name : ".$displayName."\n"."Name : "."\n"."Description : ".$description."\n"."Frequency : ".$frequency."\n"."Last Modified At".$lastModifiedAt."\n"."Created At".$createdAt."\n"."Created By : ".$createdBy); 
    fclose($file); 
    chmod("log.txt", 0777); 
    $last_line = system('/usr/local/hadoop/bin/hadoop fs -put /var/www/html/log.txt /user/hduser/Alert/', $retval); 
    $last_line = system('/usr/local/hadoop/bin/hadoop fs -ls /user/hduser/Alert/', $retval); 
    echo '<pre>'; 
    $output2 = exec('hadoop fs -copyFromLocal /var/www/html/log.txt /user/hduser/Alert/Notify'); 
    echo ' 
    </pre> 
    <hr />' . $last_line . ' 
    <hr />' . $retval; 
     '<hr />' . $output1; 

?> 
관련 문제