tail을 사용하여 Bash에서 일일 로그 파일 추적

tail을 사용하여 Bash에서 일일 로그 파일 추적

bash 스크립트를 사용하여 현재 날짜의 이름을 딴 여러 로그 파일을 모니터링하는 작업이 있습니다. YYYY-MM-DD.log.

(1) 파일을 팔로우했지만 tail -f파일 회전을 처리할 수 없었습니다.

그럼에도 불구하고 tail -F $FILENAME최대 24시간 동안만 로그를 추적할 수 있으며 재부팅이 필요합니다.

내가 성취하고 싶은 것은 비슷한 것을 만들어 tail -F $CURRENTDATE영원히 실행하고 매 자정마다 현재 날짜의 이름을 딴 새 로그 파일을 따르도록 전환하는 것입니다.

그러나 변수는 $CURRENTDATE동적이지 않은 것 같습니다. crontab24시간마다 스크립트를 실행 하지 않고 이를 수행할 수 있는 다른 방법이 있습니까 ? 어쩌면 기호 파일이나 다른 것을 설정할까요?

(2) 동시에 tail -f사용하는 경우 후속 파일이 손실되거나 이름이 바뀌면 어떤 신호를 반환합니까? 실행 중 예외를 잡는 방법.

답변1

이 변수는 $CURRENTDATE생각만큼 역동적이지 않습니다. tail -F $CURRENTDATE이 변수는 실행을 위해 명령을 평가할 때 확장됩니다. 이는 명령을 실행한 후 실행 해 보면 ps알 수 있습니다 . 출력에는 가 아닌 현재 날짜의 값이 표시됩니다 $CURRENTDATE.

$ CURRENTDATE=$(date +%Y%M%d.log)
$ tail -F $CURRENTDATE

$ ps -eaf|grep tail
saml      1171 13564  0 22:13 pts/4    00:00:00 tail -F 20130517.log

당신이 겪고 있는 문제는 일반적으로 대부분의 서버 데몬(예: Apache, Nginx 또는 Jetty)이 모든 현재 날짜를 이름이 지정된 파일에 기록한 다음 error.log해당 파일을 다른 이름(예: error_20130517.log나중에)으로 회전시키는 이유입니다.

error.log이를 통해 와 같은 명령을 사용하여 지속적으로 모니터링할 수 있습니다 tail -F error.log.

답변2

이것이 바로 당신이 찾고 있는 것입니다:

watch -n 60 'tail -n 30 /path/to/logfile-$(date +%Y-%m-%d.log)'

그러면 60초마다 현재 날짜의 로그 파일이 새로 고쳐집니다. n개의 매개변수를 원하는 대로 맞춤설정하세요. 작은따옴표에 유의하세요. 이렇게 하면 watch 명령이 명령을 한 번 평가하고 출력을 제공하는 대신 매번 명령을 평가하게 됩니다. 나 자신도 같은 문제가 있었고 이것은 나에게 완벽하게 작동했습니다. 다른 방식이 아닌 이 방식으로 로그하는 프로그램을 디버깅하려는 경우 현재 답변인 "큰 플레이어는 장난을 좋아하지 않으므로 logrotate를 사용합니다"가 적절한 솔루션이라고 생각합니다.

이것은 빠르고 더러운 접근 방식이지만 무언가를 개발하는 경우 큰 소년처럼 logrotate를 사용하십시오.

관련 정보