현재 Tomcat이 완전히 시작되었는지 확인하는 유일한 방법은 apache-tomcat 로그를 확인하는 것입니다.
tail -f ./catalina.out
그리고 내가 어떤 일을 하기 전에 이런 패턴이 나타나는지 찾아보세요.
org.apache.catalina.startup.Catalina.start Server startup in [0-9]* ms
나는 프로세스를 자동화하고 싶었고 작동하는 아래 스크립트를 작성했습니다.
tail -f ./catalina.out | egrep -q '*.Catalina.start Server startup in [0-9]* ms$'
touch done
하지만 문제는 가끔 이전 실행을 읽고 즉시 완료한다는 것입니다.
예상 프로세스:
Tomcat이 중지됨 -> Tomcat이 다시 시작됨 -> tail shell이 실행됨 -> Tomcat이 완전히 시작됨 -> Shell이 완료되었다고 알려줌
내 스크립트가 수행할 수 있는 작업:
Tomcat이 중지됨 -> Tomcat이 다시 시작됨 -> tail shell이 실행됨 -> 이전 로그로 인해 Tomcat이 완전히 시작되었다는 메시지가 즉시 표시되었습니다.
어떻게 이를 달성할 수 있나요?
답변1
기본적으로 tail -f
후속 작업이 시작되기 전에 마지막 10줄을 읽습니다. -n
해당 번호를 덮어 쓸 수 있으므로 tail -n0 -f
현재 끝에서 시작하고 이전 항목을 무시하고 새로운 변경 사항을 따릅니다.
다음을 실행하는 경우 참고하세요.
start tomcat in some way
tail -n0 -f logfile | grep -q
tail
Tomcat이 시작하라는 줄을 쓰기 전에 시작할 시간을 가질 만큼 충분히 느린 Tomcat에 의존하고 있습니다 . 일반적으로 그럴 수 있지만 스크립트는 tail
실행되기 전에 임의로 긴 지연을 갖도록 예약될 수 있습니다. 따라서 실제로 어떻게든 tail
먼저 시작하도록 준비해야 합니다.
다음과 같은 것을 상상할 수 있지만 확실하지는 않습니다.
tail -n0 -f logfile | grep -q &
pid=$!
start tomcat in some way
wait "$pid"
또한 일치하는 줄을 보면 종료되는 작은 문제가 있지만 grep -q
이로 인해 종료되지는 않습니다 tail
. 파이프가 닫힌 것을 확인 tail
하고 파이프에 다시 쓰려고 할 때만 종료됩니다 (다음에 파일에 새 내용이 나타날 때).
물론, 파일이 지속적으로 새 항목으로 채워지면 이는 빠르게 발생합니다.