지속적으로 업데이트되는 tomcat catalina.log 파일이 있습니다.
catalina.log_new
다음 2시간 동안 마지막 500줄과 추가 로그를 새 파일에 보관 하고 싶습니다 .
먼저 나는 달린다nohup tail -n 500 -F --retry catalina.log>>catalina.log_live
문제는 위의 tail
명령이 (어떤 이유로든) 종료될 수 있다는 것입니다.
다음 논리를 시도했지만 확실하지 않습니다. 질문과 관련이 없기 때문에 다음 2시간 동안 실행하는 방법에 대한 논리를 작성하지 않았습니다.
nohup tail -n 500 -F --retry catalina.log>>catalina.log_live
while true
do
ps -ef | grep -v grep | grep tail | grep 500 | grep catalina.log
if [ $? -ne 0 ]; then
nohup tail -n 1 -F --retry catalina.log>>catalina.log_live
fi
sleep 5;
done
이 접근 방식이 적합하고, 누락되거나 중복된 행이 발생하지 않으며, 지난 500개의 행과 catalina.log
INTO 이후 다음 2시간 내에 들어오는 새 행을 수집하는 데 도움이 되는지 제안해 주시겠습니까 catalina.log_live
?
답변1
사용할 필요가 없거나 nohup
포그라운드 프로세스로 실행하기만 하면 됩니다. ps
어떤 이유로든 종료되면 상위 셸 프로세스도 종료되어 다시 시작 명령이 쓸모 없게 됩니다. 더 나은 접근 방식은 이 이상한 목적을 위한 서비스를 만드는 것입니다.tail
tail
#!/bin/sh
# catalina_log_new.sh
{
# sleep 2 hours, then kill parent process
sleep $((2 * 60 * 60))
kill $$
} &
# make sure alarm is killed when the script exits
_alarm_pid=$!
trap 'kill $_alarm_pid 2>/dev/null' EXIT
# first write last 500 lines
tail -n500 catalina.log > catalina.log_new
# then append new lines only
while true; do
tail -F -n0 catalina.log >> catalina.log_new
done
timeout $((2 * 60 * 60)) ./catalina_log_new.sh
또는 2시간 후에도 계속 실행 중인 경우 스크립트를 종료하는 백그라운드 절전 모드를 대신 사용할 수 있습니다 .