간단히 말해서 ServletContextListener
은 tomcat이 시작될 때 프로세스를 실행하고, tomcat이 종료 될 때 프로세스를 종료합니다.tomcat7에 의해 생성 된 프로세스가 일시 중지됩니다.
프로세스 :
java -jar application.war -S rake jobs:work
이 큐를 처리하는 루비 delayed_job
노동자를 생성합니다. 그러나 문제는 처리 할 일이 많거나 작업이 오래 걸릴 때 발생합니다. 그것은 몇 가지를 처리하고 그것은 단지 멈 춥니 다. 오류는 발생하지 않으며 로그에는 아무 것도 표시되지 않습니다. 그것은 단지 실행을 멈춘다.
서버를 다시 시작하면 종료 신호가 전송 된 로그에 항목이 입력됩니다. 작업자가 깨어나고 작업을 마치고 (실행 중에 일시 중지 된 경우) 작업을 종료합니다.
tomcat7 외부에서 해당 명령을 실행할 때 예상대로 작동합니다.
ServletContextListener
코드 :
public class RakeServlet implements ServletContextListener
{
private Process workerProcess;
@Override
public void contextInitialized(ServletContextEvent event)
{
workerProcess = Runtime.getRuntime().exec("java -jar application.war -S rake jobs:work");
}
@Override
public void contextDestroyed(ServletContextEvent event)
{
workerProcess.destroy();
}
}
ps aux
출력 :
tomcat7 2119 0.5 16.9 3479300 668704 ? Sl 02:20 2:41 java -jar application.war -S rake jobs:wor
tomcat 대신 명령 줄에서 실행하면 처리가 중지되면 콘솔에 무엇이 출력됩니까? – Sam
@Sam 명령 줄에서 실행하면 처리가 중지되지 않습니다. – Ruslan
죄송합니다. 더 자세히 읽어야합니다. 입력을 쓰거나 응용 프로그램에서 사용하는 출력 스트림을 읽어야 할 수도 있습니다. 그렇게하지 않으면 응답이 중단 될 수 있습니다. Tomcat을 사용하여 war 파일을 직접로드하고 런타임 호출을 피할 수 있습니까? – Sam