준호씨의 블로그

로그 비우기 - truncate log 본문

개발이야기

로그 비우기 - truncate log

준호씨 2017. 9. 20. 23:03
반응형

로그의 내용을 비워야 할 때 아래와 같은 방식을 사용 하는 경우가 있다.

cat /dev/null > error.log

File already exists. 라고 나온다면 아래의 방법을 이용한다.

bash 에서의 방식이다.

cat /dev/null >| error.log

줄여서

>| file

도 가능하다

아래는 csh 에서의 방식

cat /dev/null >! error.log

noclobber 라고 하는데 왜 이런 용어를 쓰는지는 잘 모르겠으니 패스

truncate 라는 커맨드를 이용하는 방법이라거나 tee 를 이용한 방법 등등도 있으나 생략

mysql. 그리고 open file

참고로 위의 로그는 mysql 의 에러로그를 예로 든 것이다. 프로그램 구현 방식에 따라 다르지만 한번 사용한 파일을 계속 사용하는 방식의 프로그램들이라면 얼추 비슷하다. 기존 파일을 지우거나 mv 하고 새로 만들게 되면 새로 만든 파일은 기존에 mysql 에서 사용하던 파일과는 다른 파일이 되기 때문에 새 파일에 로그가 쌓이지 않는다. 그냥 어딘가 접근하기 어려운 영역에 로그가 쌓이고 있을 뿐이다.

물론 mysql 의 경우 log flush 기능을 이용하면 위의 방식도 이용 가능 하긴 하다.

mv host_name.err host_name.err-old
mysqladmin flush-logs
mv host_name.err-old backup-directory

참고로 실제로 파일을 열었는데 파일을 지웠지만 실제로 어딘가는 존재하는 파일들이 자꾸 생겨나다 보면 Too many open files 문제가 생기기도 하고 겉으로 보이는 파일은 없지만 실제 어딘가 존재 하다 보니 diskfull 을 유발하기도 한다.

lsof 같은 커맨드로 확인 하기도 한다. flush 기능을 제공 하지 않으면 해당 프로그램을 재시작 해 주는 수 밖에 없다.

여기에 관해서는 다음에 또...

참고

How to empty (“truncate”) a file on linux that already exists and is protected in someway? https://stackoverflow.com/questions/2423281/how-to-empty-truncate-a-file-on-linux-that-already-exists-and-is-protected-i

Error Log File Flushing and Renaming https://dev.mysql.com/doc/refman/5.5/en/error-log.html

반응형
Comments