2010-11-24 7 views
0

tomcat6에서 실행중인 서블릿이 있습니다. 다음 코드를 사용하여 우분투에서 명령어를 실행합니다. Runtime.getRuntime(). exec ("/ usr/bin/wine cmd/c some.vbs"); 문제는 tomcat6은 java 명령 위의 "tomcat6"사용자로 프로그램을 실행합니다. 그래서 위의 명령은 getErrorStream을 으로 반환합니다. "wine : /home/randeel/.wine은 당신 소유가 아닙니다." "randeel"사용자를 사용하여 "wine"을 설치했습니다. 해결 방법이 있습니까?java - 리눅스에서 명령어를 실행하십시오.

감사합니다. 라나.

+1

"chmod a + rwx /home/randeel/.wine"을 실행하면 작동합니까? – PeterMmm

답변

2

예 : 사용자를 전환해야합니다. 당신이 그렇지 않으면를 구성하지 않는 한 sudo 암호를 묻습니다 것을

Runtime.getRuntime().exec("sudo -U randeel /usr/bin/wine cmd /c some.vbs"); 

참고하십시오.

좀 더 우아한 해결책은 작은 서버를 네트워크 연결을 기다리는 randeel으로 실행하는 것입니다. 그런 다음 명령을 실행하고 네트워크 연결을 통해 출력을 반환합니다. java.net.Socket에 대한 설명서를 참조하십시오.

+0

안녕하세요, "sudo -l -U randeel/usr/bin/wine cmd/c some.vbs"명령을 실행하면 "/ usr/bin/wine cmd/c some.vbs"텍스트가 출력됩니다. 그게? 프로그램이 실행되지 않았습니다. sudoers를 변경하여 passwd를 요청하지 않았습니다. – rana123

+0

원하는 출력을 얻을 때까지 명령 행에서 먼저 시도하십시오. 그것이 작동 할 때에 만 Java 코드를 작동 시키십시오. –

0

두 가지 해결책이 있습니다. 1. chmod a + x를 사용하여 적절한 실행 권한을 포도주에 부여하십시오. 2. # 1을 수행하고 싶지 않으면 먼저 명령 줄을 실행하여 사용자를 변경 한 다음 응용 프로그램을 실행해야합니다. command su USERNAME 은 현재 사용자를 변경하지만 암호를 입력해야합니다. 암호를 입력하는 터미널을 에뮬레이션하려면 expect 스크립트를 사용할 수 있습니다.

그러면 다른 사용자로 명령을 실행할 수 있습니다. 이 방법을 사용한다면이 두 가지 동작을 수행하는 짧은 쉘 스크립트를 작성하고 java에서이 스크립트를 실행하는 것이 좋습니다.

# 2는 더 복잡합니다. Way # 1은 훨씬 단순 해 보인다.

관련 문제