웹에서 쉘스크립트 실행시 에러. 도와주세요 ㅡㅜ
보나
아래내용은 며칠전에 게시판에 올린 내용입니다.
몇가지 결과를 덧붙여서 다시 질문을 드립니다.
아시는분 꼭 도와주세요.. 며칠째... 골머리를 앓고 있습니다.. ㅡㅜ
-----------------------------------------------------------------
아래 소스중
InputStream inputStream = shellProcess.getInputStream();
이부분을
InputStream inputStream = shellProcess.getErrorStream();
으로 수정한 결과 에러메시지가 출력되더군요..
======== 17120 세그멘테이션 오류
정리하자면,
jsp 에서 특정 쉘을 실행하는데, 위와 같은 에러가 나구요.
telnet 과 application (메인메소드) 에서 실행하면 잘 됩니다.
꼭, 부탁드리겠습니다.
-----------------------------------------------------------------------------------
이전 질문내용
-----------------------------------------------------------------------------------
java 프로그램에서 쉘스크립트 실행에 관한 질문입니다.
리눅스상에서 java application (main method) 에서 특정 쉘스크립트 (아래 : test.sh) 를 실행하면
성공적으로 수행이 잘 됩니다.
그런데, jsp , servlet 에서 실행하면 실행이 되지 않습니다.
모든 쉘프로그램이 실행이 되지 않는건 아니구요.
cvs 특정명령어들만 실행이 되질 않는군요.. (main method 에서는 실행됩니다.)
지금 하려는게 웹상에서 리눅스의 CVS 서버의 History 정보를 보여주는것이거든요.
------------------------------
test.sh
------------------------------
cd $1 (파일위치) ------ 실행됨
cvs log $2 (파일명) ----- 실행안됨
#ls -al : 실행됨
#cvs -version : 실행됨
#기타 쉘 프로그램은 실행됨.
----------------------------
cvs_invoke.jsp
-----------------------------
%
try{
String[] cmdShell = new String[3];
cmdShell[0] = /bin/sh;
cmdShell[1] = -c;
cmdShell[2] = /cvs/test.sh /cvs/cvs_checkout xxxx.jsp;
Process shellProcess = Runtime.getRuntime().exec(cmdShell);
InputStream inputStream = shellProcess.getInputStream();
StringBuffer logInfo = new StringBuffer();
String buf;
InputStreamReader streamReadmer = new InputStreamReader(inputStream);
BufferedReader in = new BufferedReader(streamReadmer ); //in.readLine() === null 이 찍힙니다...
while((buf = in.readLine()) != null) {
//logInfo.append(buf);
out.println( buf+\n);
}
out.flush();
}catch(Exception e){
}
%main mehtod 에서 실행시 계정(uid)과
resin 에서의 계정(uid)은 동일하며, 파일의 읽기 쓰기 권한도 있습니다.
왜, cvs log 와 같은 명령어가 실행되지 않을까요?..
며칠째, 씨름하고 있습니다..
비슷한 환경에서 개발하시는 분들께서도 한번 테스트 해보시고,
왜 안되는지 제발 알려주시면 , 정말감사드리겠습니다.
혹시 제가 드린 질문에 대해 궁금하신 사항이 있으시면 언제든 리플달아주세요..
감사합니다.
-
거울
답변감사드립니다. test.sh 라는 쉘 안에는 bash_profile 에 설정된 환경변수들을 다 정의 했습니다.. 지적하신 부분이 이 부분인지.. 일반어플리케이션(main method)상에서 실행시에는 같은 쉘을 실행하지만.. 잘 되서.. 웹에서의 실행때랑 어떤부분이 차이가 있는지 모르겠네요.. 아~~~ 정말 고민됩니다.... ㅡㅜ..
답변감사드리고.. 만약.. 같은 환경에서 작업하시는 분들도 한번 테스트 해보시고... 같이 고민을 해봤으면 좋겠네 -
그대와나
아항.. 그럴 수 있겠군요.. 쉘의 환경 변수들을.. Runtime 의 execute 등으로 실행했을때에는.. 못 가지고 있을 수도 있겠군요~ 와우~
-
들빛
올려주신 에러스트림의 결과는 cvs에서 프로그램에서 난 오류인데, 보통 유닉스 쉘 상에서 실행되는 프로그램은 아규먼트 뿐 아니라 쉘상에서의 환경변수를 가지고 실행되기 때문에 Runtime.exec에서의 실행과는 다릅니다. 자세한 내용은 쉘 환경과 해당 서버가 실행된 환경에서 차이점을 찾아서 해결하셔야 할것 같습니다.
주변에 유닉스 쉘 환경에 익숙한 사람을 찾는게 제일 빠른것 같습니다.