centos7 을 활용하던 중 vm이라고는 하지만 나름 리소스를 많이 할당한 것 같은데 이 vm의 저장공간의 상태가 썩 좋지 않았다.
엄청난 서비스를 하고 있는 것도 아닌데 용량이 자꾸 딸리는이유에 대해서 고민하고 있던 중 로그파일이 굉장히 많이 쌓일 수 있다고 생각이 들었다.
그렇다면 이 로그파일을 어떻게 관리해야할까?
무작정 삭제하기엔 방금까지 액션에 대한 로그가 쌓이고 있어 그냥 삭제해버리기엔 무언가 부담이 됐다.
그래서 생각한 해답은 그냥 압축 해버리는 것이 제일 용량적인 문제를 해결할 수 있다고 생각이 들었다.
근데 매번 명령어를 입력해서 로그파일의 생성 시간을 확인하면서 오래된 것들은 삭제하고.. 이런 작업을 주기적으로 해야한다면 상당히 번거로울 것 같았고 시간이 지나면 잊어버릴 것 같아 그냥 cron으로 스크립트를 실행하는 예약을 해버리고자 했다.
앞서 생각했던 대로 날짜별로 로그파일이 쌓여있는 것을 확인했다.
그래서 로그파일의 용량을 확인해보았다.
ls -lah | grep *.log
이 명령어로 로그파일의 용량을 확인할 수 있었는데 이 중 용량을 많이 차지한 것은 megabyte 단위까지 넘어간 것을 알 수 있었다.
일반적으로 많아야 kilobyte 라고 생각했는데...
이제 이 로그파일이 쌓이는 디렉토리에 스크립트를 넣어줄 것이다.
스크립트 하나로 여러개의 명령어를 수행할 것이기 때문에 어떤 명령어가 필요한지 생각하고 정리해보았다.
일단 로그파일들을 압축하기 위한 명령어가 필요했다.
당시 내가 생각했던 압축 방식은 두가지가 있었는데, 하나는 tar
방식이고 다른 하나는 gz
방식이었다.
tar 방식으로 압축하는 것은 단순히 아카이빙을 해서 모아놓은 압축방식으로 압축이라고는 하지만 용량은 변화가 없다.
gz 방식은 압축했을 때 파일의 크기가 상당히 작아지는 효과를 볼 수 있는 무손실 압축 방식이다.
단점은...여러개의 파일을 하나로 압축할 수 없다는 점이었다...
그래서 그냥 두가지 방법을 같이 사용하기로 했다.
압축 방식을 생각했으니, 압축하고 남은 잔재를 삭제할 것이다.
단, 이 스크립트를 cron으로 예약 실행할 것이기 때문에 어떠한 메세지도 보이지 않게 할 것이다.
> dev/null 2>&1
명령어 수행 후에 오류나 메세지 등이 나타나는 명령줄 뒤에 이걸 추가하면 명령어가 실행되고 메세지가 안보인다.
아무리 용량을 줄이는 압축을 수행했다고 해도 또 오랜세월이 지나면 용량이 찰 것이므로 대략...3년정도가 지나면 삭제가 가능하도록 find ~ -delete
를 사용하기로 했다.
대충 어떤 것들을 사용할 것인지 생각했으니 순차적으로 과정을 스케치 해보면 다음과 같았다.
#!/bin/bash
dstring="`date +'%Y%m%d'`"
mkdir $dstring
gzip *.log /$dstring > /dev/null 2>&1
mv *.gz $dstring
rm -rf *.log
tar -zcf $dstring.tar.gz $dstring/
rm -rf $dstring
find /로그 파일 저장 위치/ -mtime +1094 -type f -name *tar.gz -delete
> /dev/null 2>&1
을 넣지 않고 수행해보니 메세지가 출력되길래 여기에 미출력 옵션을 추가했다.find ~ -delete
명령어를 추가 했다.일단 -mtime
옵션을 분단위로 변경하고 테스트 할 때는 잘 작동 하긴 했다.
이 스크립트를 한달마다 실행하기 위해서 cron을 통해서 예약 할 것이다.
정확하게 매월 1일 내가 아직 무언가를 하기 전인 오전 5시에 수행할 수 있도록 할 것이다.
crontab -e
0 5 1 * * /로그파일 저장 위치/방금 작성한 스크립트
잘 작동 되겠지..?
지리긴하네요