Tomcat 인스턴스를 중지하고, .war 파일과 애플리케이션 디렉터리를 삭제하고, NFS 마운트에서 webapps 디렉터리로 새 .war 파일을 복사한 다음 Tomcat 인스턴스를 다시 시작하는 스크립트를 작성했습니다. 스크립트는 잘 작동하는데 무슨 이유에서인지 Tomcat 인스턴스가 종료되지 않는지 걱정됩니다. PID를 찾을 수 없는 경우 데몬이 종료되었음을 스크립트에서 확인하고 다음 단계로 진행하기 전에 종료하도록 하려면 어떻게 해야 합니까? 가능하다면 if 문을 awk
or 로 어떻게 구성해야 합니까?sed
답변1
당신이 할 수 있는 한 가지는 Tomcat의 pid를 파일에 저장한 다음 해당 파일을 읽고 kill 명령에서 pid를 사용하는 것입니다. tomcat의 pid를 저장하려면 tomcat의 catalina.sh에 다음 줄을 추가하세요.
CATALINA_PID=$CATALINA_HOME/tomcat.pid
그러면 catalina 홈 디렉터리에 tomcat.pid 파일이 생성되고 현재 프로세스의 pid가 저장됩니다. 그런 다음 명령을 사용할 수 있습니다
kill -9 $(cat path_to_catalina_home/tomcat.pid)
그렇지 않으면 그냥 명령을 사용하십시오
pkill -9 tomcat_directory_name
"tomcat_directory_name" 또는 pkill 명령에 전달하는 모든 항목이 고유해야 합니다. 그렇지 않으면 시스템에서 여러 프로세스가 종료됩니다. 더 긴 버전의 pkill을 사용할 수도 있습니다.
ps aux | grep tomcat_directory_name | grep -v grep | awk '{print "kill -9 " $2}' | bash -v
이는 pkill과 동일한 작업을 수행하지만 조금 더 안전합니다. bash -v를 제거하여 최종적으로 올바른 pid를 얻을 때까지 이 명령을 테스트할 수 있습니다.