2012-05-04 2 views
1

서버에서 Xuggle 5.4를 실행하려고하는데 예외 처리 방법을 모르겠습니다. 동일한 코드가 다른 두 서버에서 잘 작동하며 다른 서버 (Playframework)에서도 동일한 서버에서 작동합니다. 다른 응용 프로그램에서 실행된다는 사실은 그 사실이 잘못이라고 제안합니다.java.io.IOException : Xuggle 사용 권한이 거부되었습니다.

오류 루트는 Xuggle이 임시 파일을 만들려고 시도하는 것으로 보이며 액세스가 거부되었습니다. 이것이 어디 있는지 어떻게 알 수 있습니까? 언급했듯이, 이것은 아마도 다른 설치가 이미 사용하고 다른 사용자 계정으로 실행중인 위치 일 수 있습니다.

2012-05-04 08:49:01,985 ERROR ~ could not create temp file: {} 
java.io.IOException: Permission denied 
    at java.io.UnixFileSystem.createFileExclusively(Native Method) ~[na:1.6.0_26] 
    at java.io.File.checkAndCreate(File.java:1704) ~[na:1.6.0_26] 
    at java.io.File.createTempFile(File.java:1792) ~[na:1.6.0_26] 
    at com.xuggle.ferry.JNILibrary.unpackLibrary(JNILibrary.java:274) [xuggle-xuggler-5.4.jar:5.4.0] 
    at com.xuggle.ferry.JNILibrary.loadFromClasspath(JNILibrary.java:195) [xuggle-xuggler-5.4.jar:5.4.0] 
    at com.xuggle.ferry.JNILibrary.load(JNILibrary.java:176) [xuggle-xuggler-5.4.jar:5.4.0] 
    at com.xuggle.ferry.JNILibrary.load(JNILibrary.java:158) [xuggle-xuggler-5.4.jar:5.4.0] 
    at com.xuggle.ferry.FerryJNI.<clinit>(FerryJNI.java:16) [xuggle-xuggler-5.4.jar:5.4.0] 
    at com.xuggle.ferry.Ferry.<clinit>(Ferry.java:25) [xuggle-xuggler-5.4.jar:5.4.0] 
    at com.xuggle.xuggler.XugglerJNI.<clinit>(XugglerJNI.java:19) [xuggle-xuggler-5.4.jar:5.4.0] 
    at com.xuggle.xuggler.IContainer.<clinit>(IContainer.java:1622) [xuggle-xuggler-5.4.jar:5.4.0] 
    at com.xuggle.mediatool.MediaReader.<init>(MediaReader.java:137) [xuggle-xuggler-5.4.jar:5.4.0] 
    at com.xuggle.mediatool.ToolFactory.makeReader(ToolFactory.java:77) [xuggle-xuggler-5.4.jar:5.4.0] 
    at logic.server.MediaCoder.createEncodingJobs(MediaCoder.java:39) [idoms-server:na] 
    at controllers.FileCopyJob$ProgressListener.actionPerformed(FileCopyJob.java:127) [idoms-server:na] 
    at controllers.FileCopyJob$DownloadCountingOutputStream.afterWrite(FileCopyJob.java:84) [idoms-server:na] 
    at org.apache.commons.io.output.ProxyOutputStream.write(ProxyOutputStream.java:92) [commons-io-2.0.1.jar:2.0.1] 
    at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1263) [commons-io-2.0.1.jar:2.0.1] 
    at org.apache.commons.io.IOUtils.copy(IOUtils.java:1236) [commons-io-2.0.1.jar:2.0.1] 
    at controllers.FileCopyJob.doJob(FileCopyJob.java:58) [idoms-server:na] 
    at play.jobs.Job.doJobWithResult(Job.java:50) [play-1.2.4.jar:na] 
    at play.jobs.Job.call(Job.java:146) [play-1.2.4.jar:na] 
    at play.jobs.Job$1.call(Job.java:66) [play-1.2.4.jar:na] 
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) [na:1.6.0_26] 
    at java.util.concurrent.FutureTask.run(FutureTask.java:138) [na:1.6.0_26] 
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:98) [na:1.6.0_26] 
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:206) [na:1.6.0_26] 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [na:1.6.0_26] 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [na:1.6.0_26] 
    at java.lang.Thread.run(Thread.java:662) [na:1.6.0_26] 
2012-05-04 08:49:02,003 ERROR ~ could not create temp file: {} 
java.io.IOException: Permission denied 
    at java.io.UnixFileSystem.createFileExclusively(Native Method) ~[na:1.6.0_26] 
    at java.io.File.checkAndCreate(File.java:1704) ~[na:1.6.0_26] 
    at java.io.File.createTempFile(File.java:1792) ~[na:1.6.0_26] 
    at com.xuggle.ferry.JNILibrary.unpackLibrary(JNILibrary.java:274) [xuggle-xuggler-5.4.jar:5.4.0] 
    at com.xuggle.ferry.JNILibrary.loadFromClasspath(JNILibrary.java:195) [xuggle-xuggler-5.4.jar:5.4.0] 
    at com.xuggle.ferry.JNILibrary.load(JNILibrary.java:176) [xuggle-xuggler-5.4.jar:5.4.0] 
    at com.xuggle.ferry.JNILibrary.load(JNILibrary.java:158) [xuggle-xuggler-5.4.jar:5.4.0] 
    at com.xuggle.ferry.FerryJNI.<clinit>(FerryJNI.java:16) [xuggle-xuggler-5.4.jar:5.4.0] 
    at com.xuggle.ferry.Ferry.<clinit>(Ferry.java:25) [xuggle-xuggler-5.4.jar:5.4.0] 
    at com.xuggle.xuggler.XugglerJNI.<clinit>(XugglerJNI.java:19) [xuggle-xuggler-5.4.jar:5.4.0] 
    at com.xuggle.xuggler.IContainer.<clinit>(IContainer.java:1622) [xuggle-xuggler-5.4.jar:5.4.0] 
    at com.xuggle.mediatool.MediaReader.<init>(MediaReader.java:137) [xuggle-xuggler-5.4.jar:5.4.0] 
    at com.xuggle.mediatool.ToolFactory.makeReader(ToolFactory.java:77) [xuggle-xuggler-5.4.jar:5.4.0] 
    at logic.server.MediaCoder.createEncodingJobs(MediaCoder.java:39) [idoms-server:na] 
    at controllers.FileCopyJob$ProgressListener.actionPerformed(FileCopyJob.java:127) [idoms-server:na] 
    at controllers.FileCopyJob$DownloadCountingOutputStream.afterWrite(FileCopyJob.java:84) [idoms-server:na] 
    at org.apache.commons.io.output.ProxyOutputStream.write(ProxyOutputStream.java:92) [commons-io-2.0.1.jar:2.0.1] 
    at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1263) [commons-io-2.0.1.jar:2.0.1] 
    at org.apache.commons.io.IOUtils.copy(IOUtils.java:1236) [commons-io-2.0.1.jar:2.0.1] 
    at controllers.FileCopyJob.doJob(FileCopyJob.java:58) [idoms-server:na] 
    at play.jobs.Job.doJobWithResult(Job.java:50) [play-1.2.4.jar:na] 
    at play.jobs.Job.call(Job.java:146) [play-1.2.4.jar:na] 
    at play.jobs.Job$1.call(Job.java:66) [play-1.2.4.jar:na] 
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) [na:1.6.0_26] 
    at java.util.concurrent.FutureTask.run(FutureTask.java:138) [na:1.6.0_26] 
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:98) [na:1.6.0_26] 
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:206) [na:1.6.0_26] 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [na:1.6.0_26] 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [na:1.6.0_26] 
    at java.lang.Thread.run(Thread.java:662) [na:1.6.0_26] 
2012-05-04 08:49:02,015 ERROR ~ Could not load library: xuggle; version: 5; Visit http://www.xuggle.com/xuggler/faq/ to find common solutions to this problem 
08:49:02,115 ERROR ~ 

@6a91glkdf 
Error during job execution (controllers.FileCopyJob) 

Oops: UnsatisfiedLinkError 
An unexpected error occured caused by exception UnsatisfiedLinkError: no xuggle in java.library.path 

play.exceptions.UnexpectedException: Unexpected Error 
    at play.Invoker$Invocation.onException(Invoker.java:244) 
    at play.jobs.Job.onException(Job.java:124) 
    at play.jobs.Job.call(Job.java:163) 
    at play.jobs.Job$1.call(Job.java:66) 
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:98) 
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:206) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
    at java.lang.Thread.run(Thread.java:662) 
Caused by: java.lang.UnsatisfiedLinkError: no xuggle in java.library.path 
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1738) 
    at java.lang.Runtime.loadLibrary0(Runtime.java:823) 
    at java.lang.System.loadLibrary(System.java:1028) 
    at com.xuggle.ferry.JNILibraryLoader.loadLibrary0(JNILibraryLoader.java:268) 
    at com.xuggle.ferry.JNILibraryLoader.loadLibrary(JNILibraryLoader.java:171) 
    at com.xuggle.ferry.JNILibrary.load(JNILibrary.java:161) 
    at com.xuggle.ferry.FerryJNI.<clinit>(FerryJNI.java:16) 
    at com.xuggle.ferry.Ferry.<clinit>(Ferry.java:25) 
    at com.xuggle.xuggler.XugglerJNI.<clinit>(XugglerJNI.java:19) 
    at com.xuggle.xuggler.IContainer.<clinit>(IContainer.java:1622) 
    at com.xuggle.mediatool.MediaReader.<init>(MediaReader.java:137) 
    at com.xuggle.mediatool.ToolFactory.makeReader(ToolFactory.java:77) 
    at logic.server.MediaCoder.createEncodingJobs(MediaCoder.java:39) 
    at controllers.FileCopyJob$ProgressListener.actionPerformed(FileCopyJob.java:127) 
    at controllers.FileCopyJob$DownloadCountingOutputStream.afterWrite(FileCopyJob.java:84) 
    at org.apache.commons.io.output.ProxyOutputStream.write(ProxyOutputStream.java:92) 
    at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1263) 
    at org.apache.commons.io.IOUtils.copy(IOUtils.java:1236) 
    at controllers.FileCopyJob.doJob(FileCopyJob.java:58) 
    at play.jobs.Job.doJobWithResult(Job.java:50) 
    at play.jobs.Job.call(Job.java:146) 
    ... 8 more 
+0

이 실패 프로그램으로 실행되고 어떤 사용자? 임시 파일을 어디에 붙여야합니까? 누가 임시 파일을 고수하려고하는 디렉토리를 소유하고 있으며 그 디렉토리에 대한 사용 권한은 무엇입니까? 아마도'strace'와 같은 명령으로 프로그램을 실행하여 임시 파일을 만들려는 위치를 알 수 있습니다. – QuantumMechanic

+0

사용자는 Play! 실행 중이며 사용자가 소유하고 있습니다. 문제는 어디에 쓰려고하는지 모르지만 strace 같은 도구가 작동 할 수 있습니다. 나는 모양을 가지고 있을지도 모른다 –

답변

2

는 그런 문제는 바이너리를 저장하는 데 사용되는 임시 디렉토리입니다 :

는 스택 추적입니다. 다른 인스턴스가이 임시 위치를 작성 했으므로 다른 사용자 이름으로 된 두 번째 프로세스에 액세스 권한이 없습니다. 개발자는이 문제점을 알고 있습니다. temp 디렉토리를 제거하거나 권한을 부여하면 문제가 해결됩니다.

+0

당신은이 이슈에 대한 해결책을 찾았습니까? 나는 비슷한 문제로 싸우고있다. Xuggler는 서버 쪽에서 파일을 만들 수 없습니다. – goodm

+0

사용중인 임시 디렉토리를 찾아야합니다. 임시 디렉토리를 알려주는 텍스트 문자열을 삽입하고 그 모든 권리를 부여하는 코드를 수정했습니다. 여러 사용자가있는 경우 첫 번째 사용자가 디렉토리 및 파일을 만든 후에 다시해야 할 수 있습니다. –

+0

어쩌면 시도해 보겠습니다. 현재 백엔드 마스터가 사용자 권한을 변경했습니다. – goodm

0

이 질문은 꽤 오래되었지만 xuggle은 더 이상 사용되지 않지만 여기에서 의견을 보면서이 문제를 해결 한 방법을 다른 사람들에게 보여줄 것이라고 생각했습니다.

폴더를 삭제하거나 권한을 변경하는 대신 java.io.tmpdir 속성을 설정할 수 있습니다. 예를 들어이 같이

:

java -Djava.io.tmpdir="~/custom/tempdir/" HelloWorld 

배경 :

, 다른 답변에서 코멘트에 의해 제안에 임시 폴더를 생성하는 기능으로 다시 문제의 뿌리를 추적으로 질문은 자바가 사용자 정의 할 수있는 기본 위치를 사용함을 보여줍니다.

public static File createTempFile(String prefix, 
            String suffix, 
            File directory) 
          throws IOException 

는 이름을 생성하기 위해서, 지정된 접두사와 접미사 문자열을 사용하여, 지정된 디렉토리에서 새로운 빈 파일을 작성합니다.

    이 방법 이전에 존재하지 않았던 반환 추상 패스 명이 나타내는 파일이 호출 된
  1. 이 방법 어느 쪽도 그 변종의이 같은 반환됩니다 :이 메소드가 정상적으로 복귀하는 경우는 보장된다 가상 머신의 현재 호출에서 다시 추상 경로명.

는 [...] 디렉토리 인수가 null

경우 시스템에 의존하는 기본 임시 파일 디렉토리가 사용됩니다. 기본 임시 파일 디렉토리는 시스템 등록 정보 java.io.tmpdir에 의해 지정됩니다. UNIX 시스템에서이 등록 정보의 기본값은 일반적으로 "/ tmp"또는 "/ var/tmp"입니다. Microsoft Windows 시스템에서는 일반적으로 "C : \ WINNT \ TEMP"입니다. Java 가상 머신이 불려 갔을 때에,이 시스템 프로퍼티에 다른 값을 지정할 수 있습니다 만,이 프로퍼티의 프로그램 변경은이 메소드가 사용하는 임시 디렉토리에 영향을주는 것이 보증되지 않습니다.

참조 :

  1. JavaDoc createTempFile(String, String, File)
  2. Old Google Groups discussion
관련 문제