꼬끼꼬꼬개발자
267
2015-04-03 10:40:00
6
2932

Java web환경에서 runtime.exec으로 외부 java 호출시 문제..


특정 동작을 하는 배치가 있는데요.

이걸 웹 ui에서 버튼 눌러서 실행할수 있게 해달라고 해서요.

그냥 runtime.exec쓰면 되겠거니 했는데..

막상 돌려보니까 실행이 안되더라고요?

그리고 서버를 내리니까 실행이 되더군요.ㅠㅠ

(실행상태 체크하려고 소켓 만들어 논걸로 확인했습니다.)

그래서 어 왜이러지? 하고

혹시 몰라 쓰레드를 만들어서 다시 해봤는데 같은결과 ㅠㅠ

해결책 좀 주세요.

0
  • 답변 6

  • 허허실실
    548
    2015-04-03 12:07:00
    개발자라면 실행이 안된다는게 
       호출자체가 에러인지 
      호출은 되는데 내부에서 에러가 발생하는지 
      에러도 없이 프로세스가 hold 되는 상태인지    
    그 정도는 확인해야 하지 않을까요?

    에러도 없이 프로세스가 hold 되는 상태라면 모니터링 서버와 경쟁상태로 lock 가 걸린게 아닌가 싶네요.
  • 꼬끼꼬꼬개발자
    267
    2015-04-03 15:50:06

    글 잘 읽어보시면 에러아니고 실행된다고 말씀드렸는데요..

    hold라고 보기도 어려운게 요청에 의한 응답은 합니다만..

    근데 모니터링서버라 하심은 어떤걸 말씀하시는지요?..

    저는 로컬환경에서 작업한거라..

  • 풋프
    -12
    2015-04-03 17:00:36
    process.getInputStream()으로 스트림 가져와서 끝까지 읽어보세요.
    표준출력 버퍼가 꽉 차서 block된 걸 수도 있습니다.
  • 꼬끼꼬꼬개발자
    267
    2015-04-03 17:26:13

    //풋프

    getInputStream() 사용해서 출력결과 내리니까 동작하네요..

    이상하네요..


    근데 독립적인 처리는 안되더군요..

    쓰레드를 사용해도 결국 실행주체에 의존을 하는것 같습니다.

    완전 독립적으로 할수있는 방법은 없을까요??

  • 풋프
    -12
    2015-04-03 22:35:49
    쓰레드에서 명령을 돌리셨다면, 이미 컨트롤러에는 독립적인거겠죠.
    웹 요청이 끝나도, 쓰레드는 계속 비동기로 돌거니까요.

    혹시 JVM 밖에서 명령이 돌기를 원하시는 거라면,
    명령어& 식으로 백그라운드로 돌리면 되지 않을까 싶네요.
    Java에서 &가 먹는지는 안해봐서 모르겠습니다.

    물론 JVM을 벗어나면 더 이상 Process로 제어할 수는 없겠죠.
  • benelog
    68
    2015-04-05 09:14:04


    http://helloworld.naver.com/helloworld/1113548 글을 참고하시면 도움이 되실지도 모르겠네요.


    독립적인 처리가 어떤 의미인지 좀 더 자세히 설명해주시면 좋겠습니다. 직접 main메서드를 작성하는 Standalone 프로그램에서 실행한다는 의미인가요? java 프로세스 띄울때도 &은 사용가능합니다.

  • 로그인을 하시면 답변을 등록할 수 있습니다.